Rest API의 필요성🤓
웹 애플리케이션은
HTTP
메서드를 이용하여 서버와 통신을 하게되는데 이러한 메서드의 사용은 아무런 규칙 없이 이루어지는 것이 아니며 일종의 규약이 존재한다. 이것이 REST API를 통한 바람직한 요청과 응답 방법이 필요한 이유이다.
REST API❓
REST API는 웹에서 사용되는 데이터나 리소스를
HTTP
URI로 표현하고HTTP
를 통해 요청과 응답을 정의하는 방식을 말한다. 덧붙여 설명하자면 리소스는 URI를 통해 식별하고 어떠한 행위를 할 때에는HTTP
메서드를 규정에 따라 사용하며 결과는 응답코드로 잘 작성하여 http의 원래 의미를 잘 활용하자는 것이 REST API의 핵심이라고 할 수 있다.
endpoint
를 사용해야하며 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다는 것이 REST API 1단계의 핵심endpoint
로 구분 하여 사용
endpoint
란?🧐
API가 기능을 수행하는 데 필요한 리소스에 접근할 수 위치로 API가 요청을 보내는 곳과 리소스가 있는 곳을 의미하며 endpoint에는 서버나 서비스의 URL이 포함될 수 있다❗️
endpoint 관련 문서
CRUD(Create, Read, Update, Delete)에 맞게 적절한 HTTP 메서드를 사용해야 하는 단계
참고: HTTP 메서드의 종류
요청 | 적절한 메소드 |
---|---|
조회(Read) | GET |
추가(Create) | POST |
갱신(Update) | PUT 또는 PATCH |
삭제(Delete) | DELETE |
❗️HTTP 메서드 사용 시 유의해야 할 규칙❗️
GET
메서드는 서버의 데이터에 변화시키지 않는 요청에 사용POST
메서드는 요청마다 새로운 리소스를 생성하며 PUT
메서드는 요청마다 같은 리소스를 반환PUT
메서드와 그렇지 않은 POST
메서드를 구분하여 사용할 것PUT
은 교체(전체 수정), PATCH
는 수정(부분 수정)의 용도로 사용PUT
메서드와 PATCH
메서드 역시 잘 구분하여 사용할 것
hypermedia controls
란?🤔
리소스의 표현이 클라이언트에게 리소스가 무엇을 할 수 있는지 또는 수행할 수 있는 관련 작업을 알려야 한다는 개념을 의미한다.
hypermedia controls
상황 예시: 숙박 시설 예약
- HTTP 프로토콜 사용
- 요청하는 리소스에 따라 endpoint 구분
- 예약 가능한 날짜 확인의 응답으로 받는 리소스는 김주인 숙소의 예약 가능한 날짜
/host/김주인
이라는 endpoint 사용- 특정 날짜 예약 후 slots의 1이라는 id를 가진 리소스가 변경
- 특정 날짜를 예약하는 요청에서는
/slots/1
이라는 endpoint 사용- 리소스 정보와 함께 리소스 사용에 대한 성공/실패 여부도 반환
- CRUD에 맞는 적절한 HTTP 메서드 사용
- 예약 가능한 날짜 확인 -> 조회(Read)
GET
메서드 사용- 특정 시간 예약 -> 생성(Create)
POST
메서드 사용- 명확한 응답 코드 작성
- 특정 시간 예약 후
201 Created
라는 응답 코드로 새로운 예약이 생성되었음을 보여줌- 관련 리소스 확인
- 클라이언트가
Location
헤더에 작성된 URI를 통해 확인할 수 있도록 함
- 응답에 리소스의 URI를 포함한
링크
요소 삽입하여 작성
링크
요소는 클라이언트가 응답을 받은 뒤 할 수 있는 다양한 액션을 위한 하이퍼미디어 컨트롤을 포함
- 예약 날짜 확인 후 예약할 수 있는
링크
삽입- 예약 완료 후 예약을 확인하거나 취소할 수 있는
링크
삽입
출처: code states
참고: 생활코딩
<오늘의 일기>
서버와 클라이언트가 통신하는 방식이 어렵게 느껴지면서도 이것을 통해 확장해 나갈 수 있는 것들을 그려보면 정말 유용하겠다는 생각이 들었던 이번 유닛. 사실 API의 개념이 굉장히 추상적이라는 생각이 들어 처음에는 그저 개념이 뇌 속에 들어왔다가 그대로 빠져나가는 것처럼 느껴졌는데(?) 여러 번 보다보니 개념적인 부분은 어느 정도 감이 잡혔지만 이것을 활용할 수있는 방법(예를 들어, open API로 날씨 데이터를 받아와 조작할 수 있는 방법)은 아직 잘 모르겠다. 앞으로 배워나가면서 여러 데이터를 내가 원하는대로 활용할 수 있을 정도의 수준으로 끌어올리는 연습을 많이 해야겠다.
잘보고가욥 :D