RESTAPI

taehee kim·2022년 5월 25일
2
post-thumbnail

RESTAPI(REpresentational State Transfer)란

  • Roy T.Fielding이 제한 방법론으로 컴퓨터 시스템간의 상호운용성을 제공하는 방법중 하나

RESTful의 조건

  1. 클라이언트, 서버 및 리소스로 구성되었으며 요청이 HTTP를 통해 관리되는 클라이언트-서버 아키텍처
  2. 스테이트리스 클라이언트-서버 커뮤니케이션: 요청 간에 클라이언트 정보가 저장되지 않으며, 각 요청이 분리되어 있고 서로 연결되어 있지 않음
  3. 클라이언트-서버 상호 작용을 간소화하는 캐시 가능 데이터
  4. 정보가 표준 형식으로 전송되도록 하기 위한 구성 요소 간 통합 인터페이스. 여기에 필요한 것은 다음과 같습니다.
    1. 요청된 리소스가 식별 가능하며 클라이언트에 전송된 표현과 분리되어야 합니다.
    2. 수신한 표현을 통해 클라이언트가 리소스를 조작할 수 있어야 합니다(이렇게 할 수 있는 충분한 정보가 표현에 포함되어 있기 때문).
    3. 클라이언트에 반환되는 자기 기술적(self-descriptive) 메시지에 클라이언트가 정보를 어떻게 처리해야 할지 설명하는 정보가 충분히 포함되어야 합니다.
    4. hateoas: 클라이언트가 리소스에 액세스한 후 하이퍼링크를 사용해 현재 수행 가능한 기타 모든 작업을 찾을 수 있어야 합니다.
  5. 요청된 정보를 검색하는 데 관련된 서버(보안, 로드 밸런싱 등을 담당)의 각 유형을 클라이언트가 볼 수 없는 계층 구조로 체계화하는 계층화된 시스템.
  6. 코드 온디맨드(선택 사항): 요청을 받으면 서버에서 클라이언트로 실행 가능한 코드를 전송하여 클라이언트 기능을 확장할 수 있는 기능.
  • 1, 2,3, 5는 http를 사용하면 자동적으로 지켜지며 6은 javascript를 클라이언트로 전송하여 실행할 수 있으므로 만족됨.
  • 따라서 4의 기능을 지키는 것이 주된 내용이다.
  • 4.a, 4.b는 resource를 제대로 정의하고 그에대한 method를 잘 정의하는 것으로 만족 시킬 수 있다.
  • 4.c는 content-type header를 잘 작성하는 것으로 만족시킬 수 있다.
  • 4.d는 링크정보를 response에 포함 시키는 방법으로 만족 시킬 수 있다.

실제에서 RESTful api를 구성하는 방법

  • GET 은 지정된 URI에서 리소스의 표현을 검색한다. query string에 리소스 검색에 필요한정보를 포함 할 수있다.
  • POST 는 지정된 URI에 새 리소스를 만든다.
  • PUT 은 지정된 URI에 리소스를 만들거나 대체합니다. 즉, 덮어씌운다. 멱등성을 유지해야 한다.
  • PATCH 는 리소스의 부분 업데이트를 수행한다.
  • DELETE 는 지정된 URI의 리소스를 제거한다.

REST API Method 성질

  • Safe: 호출해도 representation이 변경되지 않음.
  • Idempotent: n번 호출의 결과와 1번호출의 결과가 같다. (Post만 만족하지 못할 수 있음.) ex) Idempotent 한 메서드는 timeout 이 나서 제대로 된 응답을 못받는 경우 다시 요청해도 괜찮음이 보장됨
  • Cacheable : 응답 결과를 캐싱해서 사용해도 되는가
    • Post도 가능하지만 실제로는 Get, Head만 캐싱해서 사용.

REST API URI

  • URI규칙은 다음과 같다.
    • 마지막이 슬래쉬로 끝나서는 안된다.
    • '_'대신 '-'을 사용한다.
    • 소문자로 구성한다.
    • 동사는 포함하지 않고 http method로 대체한다.
    • 파일 확장자를 표시하지 않는다.
  • self-descriptive message
    • json, html등의 정보를 보낼때 content-type에 어떤 파일 종류인지 명시해야한다.
    • 만약 json이라면 각 key값의 의미를 알 수있도록 명시해야 한다.(많은 rest api라고 불리는 api들이 만족하지 않는 내용)
    • IANA에 media-type을 등록하는 방법이 있다.
  • hateoas
    • 각 요청에 대한 응답이 다른 상태로 바뀌는 데 필요한 정보를 포함해야한다.
    • 즉, reponse의 내용에 링크가 포함 되어있어야한다.
    • HTML file에 링크 태그를 사용하여 만족시킬 수 있다.
    • JSON의 경우 value로 링크주소를 넣어 만족 시킬 수 있다.

출처:

  • Day1, 2-2. 그런 REST API로 괜찮은가 - naver d2

https://www.youtube.com/watch?v=RP_f5dMoHFc

  • Oktane17: Designing Beautiful REST + JSON APIs - okta

https://www.youtube.com/watch?v=MiOSzpfP1Ww

  • 위키피디아

https://en.wikipedia.org/wiki/Representational_state_transfer

profile
Fail Fast

0개의 댓글