Restful API(Representational State Transfer API)
"웹 애플리케이션이 제공하는 각각의 데이터를 자원(Resource)으로 간주하고 각각의 자원에 고유한 URI(Uniform Resource Identifier)를 부여해 이를 API를 정의하기 위한 소프트웨어 아키텍처 스타일"
Restful API는 HTTP 통신을 Rest 설계 규칙을 잘 지켜서 개발한 API입니다.
Rest 설계 규칙
URI는 정보의 자원만을 표현해야 하며,
자원의 행위는 HTTP Method(GET, POST, PUT DELETE)로 표현하는걸 말합니다.
👉 HTTP URI를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, PATCH, DELETE)를 통해 해당 자원에 대한 CRUD 동작을 표시하고 적용하는 것을 의미한다.
URI 작성법
- URI는 동사보다 명사를, 대문자보다는 소문자를 사용해야한다.(http://coding.com/User❌ http://coding.com/Starting❌ | http://coding.com/user⭕)
- 마지막에 슬래시를 포함하지 않는다.(http://coding.com/user/❌ | http://coding.com/user ⭕)
- 언더바 대신 하이폰을 사용한다.(http://coding.com/user_kakao❌ | http://coding.com/user-kakao⭕)
- 파일확장자는 URI에 포함하지 않는다.(http://coding.com/user_img.jpg❌ | http://coding.com/user_img⭕)
- 행위를 포함하지 않는다.(http://coding.com/delete_post/1❌ | http://coding.com/post/1⭕)
RESTful API를 위한 HTTP Methods
1. GET
자원을 받아오기만 할때 사용
자원의 상태를 변경시키지 않으므로, safe method라고 불리기도 한다.
GET API는 멱등성의 띈다. 멱등성이란, 동일한 API를 여러번 호출시에도 동일한 결과를 얻을 수 있음을 의미한다.
2. POST
새로운 자원을 추가할 때 사용
이는 서버의 상태를 변경시키며, 때문에 비멱등성 성질을 가진다. 응답 코드로 201(Created)를 받아야 정상적으로 서버에 추가 되었음을 확인할 수 있다.
3. PUT
존재하는 자원을 변경 할 때 사용
만약 자원이 존재하지 않는 경우, API는 새로운 자원을 생성하도록 할 수 있다. 이 경우 응답코드는 201(Created)를 받게 된다.
존재하는 자원을 변경시킨 경우 200(OK) 또는 204(No Content) 응답코드를 받게 된다.
4. PATCH
한 자원의 데이터를 부분적으로 변경할 때 사용
PUT도 마찬가지로 자원을 변경할 수 있다. 하지만 조금더 명확하게는 존재하는 자원에 대해 부분적으로 업데이트를 위해서는 PATCH를 사용한다. PUT은 자원을 완전히 대체하는 경우 사용한다.
PUT의 경우 자원 전체를 갱신하는 의미지만, PATCH는 해당자원의 일부를 교체하는 의미로 사용
5. DELETE
자원을 삭제할 때 사용
DELETE 메소드는 멱등성 성질을 띈다. DELETE 메소드를 요청하면 자원을 삭제하게 되는데, 반복적으로 DELETE를 호출한 경우 결과는 바뀌지 않는다. 하지만 이미 제거되었으므로404(NOT FOUND)를 반환받는다.
6. HEAD
GET과 비슷하지만, 응답 본문(body) 없이 헤더 정보만 반환한다.
RESTful API가 아닌 아키텍처 스타일
SOAP (Simple Object Access Protocol): XML기반 프로토콜로 일반적으로 웹 서비스에 사용됩니다. 통신은 많은 비즈니스 논리와 규칙에 기반하여 복잡하고 정형화되어 있습니다.
GraphQL: RESTful API 대안으로 개발된 쿼리 언어로, 필요한 데이터만 가져올 수 있으며, 클라이언트가 필요한 데이터의 모양을 결정할 수 있어 효율적인 작업이 가능합니다.
gRPC: 구글이 개발한 원격 프로시저 호출(RPC) 기반 프로토콜로, 서버와 클라이언트 사이에 강력한 형식 지정 및 이진 통신을 제공합니다. 이로 인해 높은 성능과 낮은 지연 시간이 보장됩니다.
Falcor: Netflix에서 개발한 데이터 패칭 라이브러리로, 클라이언트가 원하는 데이터를 JSON 그래프 형태로 요청하여 효율적으로 데이터를 가져옵니다.
댓글