개발공부/네트워크

REST API

개발집사 2022. 8. 5. 10:23

REST API란?
REpresentational State Transfer
웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
표준 메서드 : List, Get, Create, Update, Delete
REST API 디자인하는 방법

실제로는 엄밀하게 3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있다. => HTTP API
REST 성숙도 모델 - 0단계

REST API 를 작성하기 위한 기본 단계.

단순히 HTTP 프로토콜을 사용하기만 해도 된다.(해당 API를 REST API 라고 할 수는 없다.)

POST 메서드 사용.

엔드포인트 : /appointment

 

REST 성숙도 모델 - 1단계

개별 리소스와의 통신을 준수해야한다.

POST 메서드 사용.

모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해야하며 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다.

[예시]

1. 예약 가능한 시간 확인

엔드포인트 : /doctors/허준

2. 특정 시간에 예약

엔드포인트 : /slots/123 (slots라는 리소스의 123이라는 id를 가진 리소스가 변경됨)

 

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

**요청에 따른 응답으로 리소스를 전달할 때, 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환해야 한다.

 

REST 성숙도 모델 -2단계
CRUD에 맞게 적절한 HTTP 메서드를 사용

  • 예약 가능한 시간을 확인 : 조회(READ) => GET 메서드 사용하여 요청 보내기.

             (GET메서드는 body를 가지지않기 때문에 query parameter를 사용하여 필요한 리소스를 전달)

  • 특정시간에 예약 : 생성(CREATE) => POST 메서드를 사용하여 요청 보내기.

         ★★POST요청에 대한 응답이 어떻게 반환되는지가 중요!!

               응답코드 201 Created (새롭게 생성된 리소스를 보내준다.)

               이를 클라이언트가 Location 헤더에 작성된 URI를 통해 확인 할 수있도록 하면 REST성숙도 모델의 2단계를 충족한 것.


HTTP 메서드를 사용할 때의 규칙

1. GET 메서드 : 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다.

2. POST메서드 : 요청마다 새로운 리소스를 생성하교 PUT 메서드는 요청마다 같은 리소스를 반환한다.

멱등성을 가지는 메서드 PUT 과 그렇지 않은 메서드 POST는 구분해서 사용해야 한다.

(※멱등성을 가지는 메서드 : GET , PUT, DELETE / 멱등성을 가지지않는 메서드 : POST, PATCH)

(※멱등 : 매 요청마다 같은 리소스를 반환하는 특징)

3. PUT 메서드 : 교체

4. PATCH : 수정


REST 성숙도 모델 - 3단계

HATEOAS(Hypertext As The Engine Of Application State. 하이퍼미디어 컨트롤) 적용

요청 : 2단계와 동일

응답 : 리소스의 URI를 포함한 링크 요소를 삽입하여 작성

Open API and API Key
Open API

정부에서 제공하는 공공데이터.

https://www.data.go.kr/

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

위 사이트에서 원하는 키워드를 검색하면 해당 키워드와 관련된 API 확인 가능.

정해진 이용 수칙이 있고, 그에 따라 제한사항(가격, 정보 등) 이 있을 수 있다. //무제한 이용가능?X

API Key

서버의 문을 여는 열쇠.

'개발공부 > 네트워크' 카테고리의 다른 글

네트워크[심화]  (0) 2022.09.07
[HTTP/네트워크] 기초  (0) 2022.08.04