본문 바로가기
Study/Computer

[기초] RESTful API란 무엇일까?

by jamiehun 2023. 3. 1.

1. API?

Application Programming Interface

  • 두 소프트웨어가 서로 통신하는데 필요한 일종의 약속으로,통신은 requests와 response를 통해서 이루어짐
  • 이 약속에 대한 일련의 정의(definitions)나 규약(protocols)들이 정해져있고,
  • Client(request) → ← Server(response)

2. REST

1) REST

Representational State Transfer

  • REpresentational : 대표적인
  • State : 상태의
  • Transfer : 전송
  • 로이필딩(Roy Fielding)이 자신의 2000년 박사 학위 논문에 정의한 네트워크 소프트웨어 아키텍처
  • ‘네트워크에서 통신 구성시 이런 구조로 설계하라는 지침’
  • 기존에는 Network 통신을 위해 제시하였으나, 네트웨크의 대부분이 WWW이기 때문에 웹 기반의 전송을 위해 쓰이는 경우가 대부분임
  • 좀 더 구체적으로 말하자면 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반에 대한 패턴
  • 이러한 지침을 잘 따라서 적는 것이 RESTful API → 그렇다면 어떻게 따라서 적으면 될까?

2) Architectural style

  • Uniform interface (통일된 인터페이스)
    • 가장 근본
    • 서버는 정보를 전달할 대 표준화(정형화)된 방법으로 전송
    • 제약조건 4가지(의역)
      1. 자원은 URI를 사용하여 주고받음
      2. Client는 이 자원에 대해 충분한 정보를 가져야함
      3. Server는 메타데이터를 활용하여 충분한 정보를 제공함
      4. Client는 이 자원을 어떻게 처리할지에 대해서도 정보를 받아야하고,
      5. Server는 이러한 처리과정도 메타데이터를 활용하여 제공함
      6. Server는 hyperlinks를 활용하여 기존 resources들 말고 좀 더 다양한 resources를 client가 처리할 수 있게 해줌
  • Statelessness (무상태성)
    • 클라이언트가 보내는 모든 request를 독립적으로 수행함
    • 각 request들끼리 서로 연관되어 있지 않아서 서버는 각 request를 완전히 독립적으로 처리 가능
  • Layered System (계층화)
    • 클라이언트와 서버 사이에 계층화 가능
    • 예를 들어, proxy 서버나 암호화 계층 등 다양한 중간 매체를 사용 가능함
  • Cacheability (캐시가능)
    • Restful 웹 서비스는 캐싱을 지원
    • 클라이언트는 response를 필요한 저장, 서버는 response time 감소

 

3. RESTful APIs?

  • 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 API
  • Restful API를 통해 secure, reliable, efficient한 통신 표준을 지키기 때문에 효율적인 정보 교환이 용이해짐

1) 작동방식

  1. 클라이언트 → 서버에 request (API documentation을 따라 요청)
  2. 서버는 클라이언트가 제대로 된 놈인지 검사
  3. 서버는 request를 받고 내부적으로 프로세스를 진행
  4. 서버 → 클라이언트에 response (request 성공적인지, client가 요청한 request를 포함한 정보들)

2) Client Request 구성요소

  1. URI (Unique resource identifier) → 식별
    • 각 자원에 대한 유니크한 식별자
    • URL을 통해서 이 식별자의 자원을 실행시킴
      • Uniform Resource Locator → 위치
      • URL은 웹사이트 주소와 유사함
      • URL은 클라이언트가 원하는 것을 명확하게 가르킴
  2. HTTP 방식
    • GET
    • POST
    • PUT
    • DELETE
  3. HTTP Header
    • Data : POST, PUT, 다른 HTTP 방식을 위한 데이터를 포함
    • Parameters
      • path parameter : 세부 정보 지정
      • /users/123 # 아이디가 123인 사용자를 가져온다.
      • query parameter : 리소스에 대한 추가정보 요청
      • /users?id=123 # 아이디가 123인 사용자를 가져온다.
      • cookie parameter : 클라이언트 인증

3) Server Response 구성 요소

  1. Status Bar
    상태코드  
    200 일반적인 response 성공
    201 POST method에 대한 response 성공
    400 클라이언트 요청 부적절할 경우 응답코드
    301 클라이언트가 요청한 리소스에 대한 URI 변경되었을 때 사용하는 코드
    500 서버에 문제가 있을 경우 사용하는 응답코드
  2. message body
    • XML, JSON 등
    • JSON 예시 : {”name” : “jamie”, “favorite” : “chicken”}
  3. header
    • 헤더와 메타데이터를 포함
    • 여기에는 서버, 인코딩, 날짜, content type 등의 다양한 정보들이 포함되어 있음

4) 장점

Scalability (확장가능성)

  • 서버와 클라이언트의 상호작용을 최적화 함으로써 시스템의 규모를 효율적으로 확장/축소 시킬 수 있음
  • 예를 들어, 무상태성은 서버의 부하를 줄이고, 잘 관리된 캐시는 클라이언트-서버의 상호작용 과정을 적게 만듦

Flexibility (유연성)

  • 서버와 클라이언트가 분리되어 있기 때문에 유연하게 움직임
  • 무슨 말이냐면 클라이언트와 서버가 request, response만 주고 받기 때문에 한 쪽의 platform이나 technology가 바뀌더라도 반대편에서 영향을 받지 않음
  • 계층화가 이러한 탄력성을 더욱 더 증대시킴

Independence (독립적)

  • 사용되는 기술과 독립적으로 쓰이기 때문에 REST API를 다양한 언어, 어플리케이션에서 사용 가능

 

[참고자료]

https://aws.amazon.com/ko/what-is/api/?nc1=h_ls 

https://namu.wiki/w/REST