RESTful: REST에 접미사 -ful을 붙여 REST의 제약을 준수했다는 의미
REST란? 웹에서 사용하는 아키텍처 중 하나
REST(Representational State Transfer)
-서버와 클라이언트간 통신 방식 중 하나
-자원을 이름으로 구분하여
-자원의 상태를 주고 받음
배경: 웹이 복잡해지면서 서버-클라이언트 통신 횟수가 늘어나면서, 통신 방식의 통일의 필요성이 커짐
-REST에서 자원을 구분하고 처리하기 위해 사용
-URI를 잘 네이밍 할수록 API가 직관적이고 사용하기 쉬움
URI 네이밍 규칙
- 명사를 사용해서 자원을 표현
ex) /customers, /customers/{id}/address
예외로 controller 역할은 동사를 사용하여 표현 가능
ex) /game/play 접근시 게임 시작이면, 동사 play 표현 가능- 자원간 계층관계를 표현하기 위해 / 사용
ex) /customers/{id}- -을 사용하여 URI 가독성을 높일 수 있다.
ex)
/profilemanagement (x)
/profileManagement (x)
/profile-management (o)- URI에 가급적 밑줄을 사용하지 않음
일부 브라우저나 화면에서 글꼴에 따라 _가 가려질 수 있다.- URI에 소문자만 사용
- URI에 파일 확장자 표시 X
ex) index.html (x)- URI에 CRUD 함수의 이름 사용 X => HTTP 메소드를 통해 요청을 구분
- 자원의 필터링을 위해 새로운 API를 만들지 않음 => Query String을 이용한다.
Query String: 주소?속성=값&속성=값&..(특정 주소로 이동할 때 페이지에 대한 옵션으로 활용)
ex) crews?type=frontend&sort=name,asc
crews중 frontend를 name에 따라 오름차순 정렬하는 경우
-URI는 singleton 이나 collection으로 표현
ex)
/customer (singleton)
/customers (collection)
-url는 서브 컬렉션을 포함 할 수 있음.
ex) customers/{id}/accounts
클라이언트는 HTTP 메소드와 데이터를 통해 서버에 요청을 하고, 서버는 HTTP 상태코드와 데이터를 클라이언트에 응답을 한다.
GET: 자원 검색
ex) 유저 리스트를 얻어오고 싶으면 /users + HTTP 메서드 GET
POST: 자원 생성
body와 함께 이루진다. body: {'name': 'A', 'age': '20'}
ex) 유저리스트에 등록하려면 /users + HTTP 메서드 POST
=>db에 저장
PUT: 자원 업데이트
보내지 않은 정보는 null값 저장
body와 함께 전달
PATCH: 자원 업데이트
보내지 않은 정보는 기존 데이터를 유지 함.
body와 함께 전달
DELETE: 자원 삭제
1xx: 조건부 응답
2xx: 성공
3xx: 리다이렉션
4xx: 클라이언트 오류
5xx: 서버 오류
구체적인 내용은 필요할때 찾아보기