REST API

김나율·2022년 10월 6일
0

section2

목록 보기
14/15

REST API(Representational State Transfer)

: 웹에서 사용되는 데이터나 자원을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

  • REST API를 디자인하는 방법
    =>리차드슨의 REST성숙도모델

    • 0단계
      : 단순히 HTTP프로토콜 사용
      (REST API라고는 할수 없음. 작성하기 위한 기본단계)
      ‣ 엔드포인트로 모두 /appointment사용

      Case) 병원 예약

      요청 내용요청응답
      예약가능한 시간 확인POST/ appointment HTTP/1.1HTTP/ 1.1 200 OK
      특정시간에 예약POST/ appointment HTTP/1.1HTTP/ 1.1 200 OK
    • 1단계
      : 웹에서 사용되는 모든 데이터나 자원을 HTTP URI로 표현한다.
      개별 리소스와의 통신을 준수
      -모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해야하며 요청하고 받는 자원에 대한 정보를 응답으로 전달해야한다.
      -요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환.

      ‣ 엔드포인트 작성방법
      -동사, HTTP메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고, 리소스에 집중해 명사 형태의 단어로 작성

      Case) 병원예약-실패로 가정

      요청 내용요청응답
      예약가능한 시간 확인POST/doctors/허준 HTTP/1.1HTTP/ 1.1 200 OK
      특정시간에 예약POST/slots/123 HTTP/1.1HTTP/ 1.1 200 OK

      ☞특정시간에 예약
      요청: 실제 slots라는 리소스의 123이라는 id를 가진 리소스가 변경
      응답: 성공/ 실패 여부 반환

      {
       “appointmentFailure”:{
         “reason”: “해당시간은 이미 예약되어있습니다.”
      }
    • 2단계
      :CRUD에 맞게 적절한 HTTP메서드를 사용하는것에 중점
      ‣ HTTP메서드 사용시 규칙
      1. GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용해야 합니다.
      2. POST 메서드는 요청마다 새로운 리소스를 생성하고 PUT 메서드는 요청마다 같은 리소스를 반환합니다. 이렇게 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 합니다. 그렇기 때문에 멱등성을 가지는 메서드 PUT과 그렇지 않은 메서드POST는 구분하여 사용해야 합니다.
      3. PUT 메서드와 PATCH 메서드도 구분하여 사용해야 합니다. PUT은 교체, PATCH는 수정의 용도로 사용합니다.

      Case)병원예약

      요청 내용요청응답
      예약가능한 시간 확인GET/doctors/허준/slots? date=2022-08-10 HTTP/1.1HTTP/ 1.1 200 OK
      특정시간에 예약POST/slots/123 HTTP/1.1HTTP/1.1 201 Created Location: slots/123/appointment

      ☞ 예약가능한 시간확인 => 조회(READ)하는 행위
      요청 : GET메서드를 사용하여 요청을 보내고, GET메서드는 body를 가지지 않기 때문에 queryparameter를사용하여 필요한 리소스를 전달
      ☞ 특정시간에 예약 => 생성(CREATE)하는 행위
      요청 : POST메서드를 사용하여 요청을 보내고, POST요청에 대한 응답이 어떻게 반환되는지가 중요.
      응답 : 새롭게 생성된 리소스를 보내주기 때문에, 응답코드는 201created로 명확하게 작성. 관련 리소스를 클라이언트가 Location헤더에 작성된 URI를 통해 확인할 수 있도록 한다.

    • 3단계
      : HATEOAS(Hypertext As The Engine Of Application State)로 표현되는 하이터미디어컨트롤을 적용.
      ‣응답에는 리소스의 URI를 포함한 링크요소를 삽입하여 작성

      Case)병원예약

      요청 내용요청응답
      예약가능한 시간 확인GET/doctors/허준/slots? date=2022-08-10 HTTP/1.1HTTP/ 1.1 200 OK
      특정시간에 예약POST/slots/123 HTTP/1.1HTTP/1.1 201 Created Location: slots/123/appointment

      ☞ 예약가능한 시간 확인
      응답: 예약가능시간을 확인한 후 그시간대에 예약을 할수 있는 링크 삽입

      {
        “links” : {
          “appointment”:{
            “href”: “http://~~,
            “method”:”POST”
          }
        }
      }

      ☞ 특정시간에 예약
      응답 : 특정시간에 예약을 완료하고 나서는 그예약을 다시 확일할수 있는 링크 삽입

      {
       “links” : {
         “self”:{
           “href”: “http://~~,
           “method”:”GET”
           },
        "cancel”:{
          "href”: “http://~~,
          “method”:”DELETE”
          }
        }  
      }
  • Open API와 API Key

    • Open API
      : 공공데이터에 쉽게 접근할 수 있도록 정부는 Open API의 형태로 공공데이터 제공
      -API마다 정해진 이용수칙이 있고, 그 이용수칙에 따라 제한사항(가격, 정보의 제한 등)이 있다.
    • API key
      : 서버의 문을 여는 열쇠(API이용하기 위해 필요)
      -API Key가 필요한 경우에는 로그인한 이용자에게 자원에 접근할 수 있는 권한을 API Key의 형태로 제공하고, 데이터를 요청할 때 API key를 같이 전달해야 원하는 응답을 받을 수 있다.

출처
코드스테이츠

0개의 댓글