URI 설계에서 가장 중요한 것은 리소스 식별 이다
->
회원
목록 조회 -> /members회원
조회 -> /members{id} 얘랑 회원
등록 -> /members{id} 얘를 어떻게 구분하지??회원
수정 ->회원
삭제 ->리소스와 행위를 분리
가장 중요한 것은 리소스를 식별 하는것.
:클라이언트가 서버에 요청을 할때 기대하는 행동
리소스 ~: 레프리젠테이션
기타 메서드
HEAD: GET 과 동이랗지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
OPTIONS: 대상 리소스에 대한 통신 가능 옵션 (메서드)을 설명 (주로 CORS에서 사용)
CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
TRACE: 대상 리소스에 대한 경로를 따라 메세지 루프백 테스트 수행
CONNECT, TRACE 는 거의 사용 안 한다.
/search?q=hello&hl=ko HTTP/1.1Host:www.google.com
리소스 조회
서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
클라이언트 -> 서버 : GET으로
서버 -> 클라이언트 : GET::Response 서버에서 응답 데이터로 만들어서 클라이언트에 보내준다 (이걸 데이터를 가지고 그린다.)
: 클라이언트 에서 서버에 요청을 보낼때 데이터를 줘서 그 데이터를 서버에서 처리해줘 !
POST/members HTTP/1.1
Content-Type: application/json
{
"username":"hello",
"age" : 20
}
요청 데이터 처리
메세지 바디를 통해 서버로 요청 데이터 전달
서버는 요청 데이터를 처리
주로 전달된 데이터로 리소스 등록, 프로세스 처리에 사용
클라이언트 -> 서버 : POST
POST/members HTTP/1.1
Content-Type: application/json
{
"username":"hello",
"age" : 20
}
HTTP/1.1 201 Created (201 은 이게 어디에 저장 되어있는지 Location 도 보냄, 그게 아닌 200 으로 해도됨)
Content-Type: application/json
Content-Length:34
Location:/members/100
{
"username":"hello",
"age" : 20
}
예시
스펙: POST 메서드는 대상 리소스가 리소스의 고유 한 의미 체계에 따라 요청에 포함 된 표현을 처리하도록 요청합니다 ( 구글 번역 이라 이해 어렵)
예를 들어 POST는 다음과 같은 기능에 사용 됩니다.
정리 : 이 리소스 URL 에 POST 요청이 오면 요청이 어떻게 처리할지 리소스마다 따로 정해야함-> 정해진게 없다는 뜻
3.다른 메서드로 처리하기 애매한 경우
PUT/members/100 HTTP/1.1
Content-Type: application/json
{
"username":"hello",
"age":20
}
리스소를 대체
중요! 클라이언트가 리소스를 직별
클라이언트 -> 서버 : PUT 을 보내면
PUT/members/100 HTTP/1.1
Content-Type: application/json
{
"username":"hello",
"age":20
}
{
"username":"old", -> "hello"
"age":50 -> 20
}
주의! 리소스를 완전히 대체한다.
PUT/members/100 HTTP/1.1
Content-Type: application/json
{
"age":20
}
{
"age":20
}
따라서 PUT은 리소스를 수정하는것이 아닌 갈아 치우는 것이다.
수정 하는 경우로 사용 하고 싶을땐? -> PATCH!
PATCH/members/100 HTTP/1.1
Content-Type: application/json
{
"age":20
}
{
"username": "old",
"age":20
}
캐시: 내 로컬에 이미지나 그런걸 캐시화 해놓은것. 다음에 또 요청할때 서버에서 가죠오는게 아니라 로컬에서 가져 오는것.