RESTful API란 REST(Representational State Transfer) 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스이다.
HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식
최근의 서버 프로그램은 다양한 클라이언트의 등장과 여러 브라우저와 스마트폰과 같은 모바일 디바이스에서도 통신을 할 수 있어야 하고, 이러한 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색한 결과 REST에 관심을 가지게 되었다 .
REST의 정의
REST의 개념
REST의 구성요소
Resource : 자원
웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원(Resource)에 고유한 ID인 HTTP URI를 부여한다.
📌
URL : Uniform Resource Locator 인터넷 상 자원(파일)의 위치
URI : Uniform Resource Identifier 자원을 식별하기 위한 문자열의 구성
URI는 URL을 포함하고 더 포괄적인 범위
Method : 행위
HTTP 프로토콜의 Method를 사용
서버에 요청을 보내기 위한 방식, CRUD 연산 중에서 적절한 Method를 사용하여 서버에 요청을 보내야 함.
<CRUD Operation>
Create : 생성(POST)
Read : 조회(GET)
Update : 수정(PUT, PATCH)
Delete : 삭제(DELETE)
HEAD: header 정보 조회(HEAD)
Representation of Resource
클라이언트와 서버가 데이터를 주고받는 형태로 JSON
, XML
, text
, rss
등이 있다. Key, Value를 활용하는 Json을 주로 사용.
REST의 장점
REST의 단점
Client-Server Architecture (서버-클라이언트 구조)
Stateless(무상태)
Cacheable(캐시 처리 가능)
Last-Modified
태그나 E-Tag
를 이용하면 캐싱 구현 가능.Layered System(계층화)
Self-Descriptiveness(자체 표현)
Uniform Interface(일관된 인터페이스)
📌
- URI는 명사를 사용.
- URI는 소문자로만 구성.
- 슬래시(/)로 계층 관계를 표현.
- URI의 마지막에는 슬래시를 붙이지 않는다.
- 가독성이 떨어지는 경우 하이픈(-)을 사용.
URI는 정보의 자원을 표현해야 한다.
자원에 대한 행위는 HTTP 메소드로 표현한다.
URI는 정보의 자원을 표현해야 한다.
도큐먼트 : 객체 인스턴스나 데이터베이스 레코드와 유사한 개념
컬렉션 : 서버에서 관리하는 디렉터리라는 리소스
스토어 : 클라이언트에서 관리하는 리소스 저장소
자원에 대한 행위는 HTTP 메소드로 표현한다.
GET/members/insert/2 (x) # GET 메서드는 리소스 생성에 맞지 않다.
POST/members/2 (o)
슬래시 구분자(/)는 계층 관계를 나타내는 데 사용
URI 마지막 문자로 슬래시(/)를 포함하지 않는다. (혼동을 주지 않도록 분명한 URI를 만들어야 함)
하이픈(-)은 URI 가독성을 높이는데 사용
밑줄(_)은 URI에 사용하지 않는다.(가독성)
URI 경로에는 소문자가 적합.
파일 확장자는 URI에 포함시키지 않는다.(Accept header를 사용)
http ://restapi.example.com/members/soccer/345/photo.jpg (X)
GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)
REST 리소스 간에 연관 관계가 있는 경우
/리소스명/리소스 ID/관계가 있는 다른 리소스명
ex) GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
<서브 리소스에 명시적으로 표현하는 방법>
GET : /users/{userid}/likes/devices (사용자가 좋아하는 디바이스 목록)
도큐먼트 : 문서, 한 객체
컬렉션 : 문서들의 집합, 객체들의 집합
http:// restapi.example.com/sports/soccer/players/13
sports
, players
컬렉션과 soccer
, 13
(13번인 선수)를 의미하는 도큐먼트로 URI가 구성됨.잘 설계된 REST API는 URI만 잘 설계된 것이 아닌 그 리소스에 대한 응답을 잘 내어주는 것까지 포함되어야 함.
응답의 상태 코드로도 많은 정보를 전달 하기 때문에 값을 명확히 돌려주는 것이 중요하다.
HTTP Status Code 정리 자료 [MDN]
다시 돌아와서, RESTful API란❓
-> RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내는 용어.
사용 목적
이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
RESTful한 API는 성능 향상과는 관련없이, 일관적인 컨벤션을 통한 API의 이해도와 호환성을 높이는 것이 주 목적.
성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.
그런 REST API로 괜찮은가
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://mangkyu.tistory.com/46
https://meetup.toast.com/posts/92
https://sookiwi.com/posts/tech/2018/11/11/Is-it-okay-with-such-REST-APIs/