개발 공부를 하다보면 반복해서 보는 것들이 있다.그 중에서도 오늘은 RESTFUL API, REST API에 대해 알아보려고 한다.특히 이번주는 Spring에 입문하게 되면서 여러 API들을 다루게 되었는데 기존에 궁금했던 것을 계기로 알아보게 되었다.
우선 두 단어에서 반복되는 REST란 무엇일까?
REST?
"Representational State Transfer"
자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것.자원(resource)의 표현(representation)에 의한 상태 전달을 뜻한다.
-a.자원의 표현
자원:해당 소프트웨어가 관리하는 모든것
ex)문서,그림,데이터,해당 소프트웨어 자체 등
자원의 표현 : 그 자원을 표현하기 위한 이름
ex)DB의 학생 정보가 자원일 때,'students'를 자원의 표현으로 정한다.
-b.상태(정보) 전달
데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달한다.
JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.
GET - Read : 정보요청,URI가 가진 정보를 검색하기 위해 서버에 요청한다.
POST - Create : 정보 입력,클라이언트에서 서버로 전달하려는 정보를 보낸다.
PUT - Update : 정보 업데이트,주로 내용 갱신을 위해 사용한다.(데이터 전체를 바꿀 때)
PATCH- Update : 정보 업데이트,주로 내용 갱신을 위해 사용한다.(데이터 일부를 바꿀 때)
DELETE- DELETE : 정보 삭제,(안전성 문제로 대부분 서버에서 비활성화한다.)
1.Server-Client(서버-클라이언트 구조)
2.Stateless(무상태)
3.Cacheable(캐시 처리 기능)
4.Layered System(계층 구조)
5.Uniform Interface(인터페이스 일관성)
6.Self-Descriptiveness(자체 표현)
REST API 설계 시 가장 중요한 항목은 2가지로 요약
- 첫 번째, URI는 정보의 자원을 표현해야 한다.
- 두 번째, 자원에 대한 행위는 HTTTP Method(GET,POST,PUT,PATCH,DELETE)로 표현한다
URI는 명사를 사용한다.(리소스명은 동사가 아닌 명사를 사용해야 한다.)
1-1.아래와 같은 동사를 사용하지 말 것
/getAllUsers
/getUserById
/createNewUser
/updateUser
/deleteUser
2.슬래시( / )로 계층 관계를 표현한다.
URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.
밑줄(_ )을 사용하지 않고,하이폰(-)을 사용한다.
URI는 소문자로만 구성한다.
HTTP 응답 상태 코드 사용
-클라이언트는 해당 요청에 실패,처리완료 또는 잘못된 요청 등에 대한 피드백을 받아야 한다.
파일확장자는 URI에 포함하지 않는다.
ex) http://https://velog.io/@veganwithbacon/photo.jpg (X)
REST API와 RESTful API의 차이는 뭘까?
RESTful은 REST의 설계 규칙을 잘 지켜서 설계된 API를 RESTful한 API라고 한다.즉, REST의 원리를 잘 따르는 시스템을 RESTful이란 용어로 지칭된다.
!!!!이것만은 알고 가자!!!!
URI는 정보의 자원만 표현해야 하며,자원의 행위는 HTTP Method에 명시해야한다.