Restfull
8/25/2022
작성자 : 홍원배
Representational State Transfer
자원(URI)와 행위(httpMethod)를 통해서 클라이언트-서버와의 통신을 하는 아키텍쳐인 RestAPI의 표준을 잘 지킨 것
- 적절한 상태코드를 사용하는 것도 RestAPI의 조건이라 할 수 있다
- 현대의 통신은 브라우저 뿐만 아니라 폰, 태블릿 등 다양한 기기와 통신을 해야하기 때문에 표준화된 통신 아키텍쳐가 필요했기에 등장
자원(URI)와 행위(Method)
Restfull한 자원
fetch GET /category
fetch GET /categories/12
자원을 가져올 때, collection / member(element)를 구분+path와 query의 차이 : query는 리소스의 범위를 제한
+params는 path의 개념적인 다른 설명
HTTP Method
클라이언트가 웹 서버에게 사용자 요청의 목적이나 종류를 알리는 수단
POST vs PUT
POST와 PUT은 구분해서 사용해야한다. POST는 새로운 데이터를 계속 생성하기 때문에 요청시마다 데이터를 생성하지만, PUT은 사용자가 데이터를 지정하고 수정하는 것이기 때문에 같은 요청을 계속하더라도 데이터가 계속 생성되지는 않는다. (멱등성의 차이)
멱등(Idempotent Methods)
이 말은 메소드를 계속해서 호출해도 결과가 똑같다는 뜻이다. GET, PUT, DELETE는 멱등하다고 볼 수 있지만 POST나 PATCH는 멱등하다고 볼 수 없다
멱등은 요청의 결과가 항상 일정하다는 뜻
요청의 결과란 행위의 결과지 항상 일정한 내용이라는 것은 아니다
POST는 뚜렷한 목적이 없을 때, 새로 생성할 때 사용
PUT은 수정하려는 해당 리소스가 없으면 새로 생성한다
적절한 메소드를 사용하는 것이 중요한 것이 Location URI 헤더를 포함하는 것은 POST이고 PUT은 구체적인 Location 헤더를 전송하지 않기에 헤더 용량 차이가 있다
PUT vs PATCH
PUT은 지정한 데이터를 전부 수정하는 Method이지만 PATCH는 리소스의 일부분이 변경되는 방법입니다. 그래서 PUT은 멱등하지만, PATCH는 멱등하다고 볼 수 없습니다.
상태코드
적절한 상태코드를 사용하는 것도 Restfull한 조건
300은 리다이렉션 - 요청을 완수하려면 추가작업이 필요하다는 의미
location헤더가 있으면 위치를 자동 이동 시킨다
Rest한 설계를 해봤는가?
포스트를 만든다고 하면
post 메소드를 통해 /api/post 를 만들고
patch 메소드를 통해 /api/post/:id 특정 아이디를 params로 보내서 바꿈
통신방법은 RestAPI만 있을까?
GraphQL
미들서버에서 필요한 데이터만 가져와서 가공