1. URI를 작성할 때 '리소스'를 파악해야한다.
2. 메소드는 '행위'를 가르킨다.
조회, 등록, 수정, 삭제와 같은 동사들을 GET, POST, PUT, PATCH, DELETE 등의 메소드로 변형 할 수 있다.
주로 사용되는 메소드
기타 메소드
3. 컨트롤 URI
간혹 리소스와 메소드만으로 URI를 작성할 수 없을 때, 동사의 형태로 등록해야 할 경우가 있는데, 이를 컨트롤 URI라고 부른다
http://api.example.com/cart-management/users/{id}/cart/**checkout**
http://api.example.com/song-management/users/{id}/playlist/**play**
위의 checkout과 play가 컨트롤 URI에 해당
- 안전(Safe) : 기존 값에 영향을 주지 않는 것
- 멱등성(Idempotent): 여러 번 요청해도 결과값은 한 번 요청한 이후로 변하지 않는 것. 이는 자원 복구 등의 장점이 있다.
ex) DELETE /user/1
DELETE /user/1 --> 이미 삭제 되었기 때문에 재삭제가 불가능
그리고 재요청 중간에 다른 곳에서 리소스를 변경해버리는 등의 경우는 고려하지 않는다.
ex) GET /user/1
PUT /user/1
GET /user/1
- 캐시가능(Cacheable) 응답결과를 서버에 캐시해서 사용되는 경우로, 실무에서는 GET정도만 사용하며, 다른 메소드는 구현하기 까다로워 잘 사용되지 않는다.
1. 쿼리 파라미터를 통한 데이터 전송
2. 메시지 바디를 통한 데이터 전송
1. 정적데이터조회
텍스트, 이미지 파일 등을 정적으로 조회할 경우 리소스 경로만으로 처리가 가능하며 GET을 사용한다.
2. 동적데이터조회
쿼리파라미터를 사용한 동적 데이터 조회. 주로 필터 등을 이용한 조회에 사용 되며 GET을 사용한다.
3. HTML Form 데이터 전송
(한 번도 사용 해보지 못한 전송법) HTML 소스만으로 전송이 가능하며, 아래와 같이 action과 method 등을 정의하여 사용가능하다. 단, GET, POST만 사용 가능
<form action="/user" method="get">
<input name="username">
<input name="age">
<button type="submit">
Content-type default는 x-www-form-urlencoded
쿼리 파라미터 처럼 key, value 형태로 만들어서 body 에 만들어준다.
전송 데이터를 url encoding 처리해준다.
파일도 전송하고 싶다면 form 태그 안에 enctype="multipart/form-data"
속성으로 사용 가능하다.
4. HTTP API 데이터 전송
서버 to 서버 백엔드 시스템 통신, 앱 클라이언트, 웹 클라이언트(Ajax)에서 사용하며, Content-type은 application/json을 주로 사용
• 회원 목록 /members -> GET
• 회원 등록 /members -> POST
• 회원 조회 /members/{id} -> GET
• 회원 수정 /members/{id} -> PATCH, PUT, POST
• 회원 삭제 /members/{id} -> DELETE
- 클라이언트는 등록될 리소스의 URI를 모른다.
- 서버가 새로 등록된 리소스 URI를 생성해준다.
- 컬렉션(Collection)
• 파일 목록 /files -> GET
• 파일 조회 /files/{filename} -> GET
• 파일 등록 /files/{filename} -> PUT
• 파일 삭제 /files/{filename} -> DELETE
• 파일 대량 등록 /files -> POST
-> 아마 우리 프로젝트에서 이미지 등록 부분은 PUT으로 대체해야할 듯함
- 클라이언트가 리소스 URI를 알고있어야함
- 클라이언트가 직접 리소스의 URI를 지정한다.
- 스토어(Store)
• 회원 목록 /members -> GET
• 회원 등록 폼 /members/new -> GET
• 회원 등록 /members/new, /members -> POST
* 등록 폼 -> 등록으로 가는 URI(/new까지)는 대체로 맞춰주는 편이 좋다(리다이렉션 등을 고려해서)
• 회원 조회 /members/{id} -> GET
• 회원 수정 폼 /members/{id}/edit -> GET
• 회원 수정 /members/{id}/edit, /members/{id} -> POST
• 회원 삭제 /members/{id}/delete(컨트롤 URI) -> POST
마지막 정리