
앞선 게시글에서도 언급했지만 웹의 본질은 요청과 반환, Request와 Response다.
HTTP 상에서 웹의 본질인 요청과 반환을 위해서는 REST API를 사용하는데, 몇가지 단점 보완을 위해
GraphQL도 사용한다.

REST는 철학이다
REST는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한
소프트웨어 아키텍처의 한 형식으로
REST는 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.REST는 REpresentational State Transfer의 약자로
자원을 이름으로 구분해 해당 자원의 상태(정보)를 주고받는 모든 것을 의미하는데,
자원의 표현에 의한 상태 전달 이란
HTTP URI를 통해 자원(Resource)를 명시하고, HTTP Method를 통해 해당 자원에 대한
CRUD Operation을 적용하는 것을 의미한다.
REST는 자원 기반의 구조(ROA, Resource Oreiented Architecture)설계의 중심에 Resource가 있고, HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍처를 의미한다.
SOA, SOAP웹 사이트의 이미지, 텍스트, DB내용 등 모든 자원에 고유한 ID인 HTTP URI를 부여한다.
웹의 요청(Request)는 URI와 Method로 구성된다.
'어떤 자원에 대하여'의 대상으로, 명사로 표현 가능한 것들이다.
URL, Location : 자원의 위치
URI, Identifier : 자원의 위치에서 특정 자원에 대한 고유 식별자
URI의 구성 요소는 큰 범위에서 작은 범위로 좁혀간다.
collection : 범주/집합 (People)
document{id} : 범주 내 특정 대상 (Person)
id값을 사용한다.store : 범주 내 특정 대상을 꾸미는 요소로 document에 귀속된 정보를 의미한다.
controller : method를 제외한 행위를 명시하며, method에 대한 의미를 강화한다
URI에서 매번 달라지는 값은 변수로 처리하는데 변수의 종류는 두 가지가 있다.
Path Variable은 URI 경로(Path)에 포함된 변수로 특정한 리소스를 식별할 때 사용된다.
URI 경로 끝 ? 뒤에 이어지는 키-값 쌍으로 추가되는 데이터로
필터, 정렬, 페이지네이션, 검색 등 요청 세부사항을 지정할 때 사용된다.
?category=electronic&sort=price&order=asc?status=available(어떤 자원에 대해) '어떤 행위를 할 것인가?'로 동사로 표현 가능하다.
클라이언트는 자원에 대해 서버가 수행해야할 동작을 Method로 지정하여 요청을 보낸다.
UPDATE에는 두 가지 Method가 있는데, PUT과 PATCH이다.
PUT : 전반적인 수정PATCH : 작은 단위 수정 클라이언트가 자원의 상태(정보)에 대한 조작을 요청하면
서버는 이에 적절한 응답을 보내는데,
이 때 응답 데이터의 형태는 JSON과 XML이다.
서버의 응답에는 요청을 처리한 결과에 대한 상태코드가 함께 담겨온다.
REST가 철학이라면,REST API는 그 철학을 실제로 구현한 API를 의미한다.
/users, /membersURI에 HTTP Method가 들어가거나, 행위에 대한 동사 표현이 들어가면 안된다.
DELETE/members/1, GET/members/1/)는 계층 관계를 표현하는데 사용/)를 포함하지 않는다.-)은 URI 가독성을 높이는데 사용_)은 URI에 사용하지 않는다.REST 리소스 간에는 연관 관계가 있는 경우 다음과 같은 표현 방법을 사용한다.
/리스소명/리소스 ID/관계가 있는 다른 리소스명
참고 REST API와 RESTful API가 명확한 차이가 있다고하는데, 아직은 잘 모르겠다 ,,
이 부분은 추후에 수정하도록 하자
REST의 특징, 설계 원칙을 잘 지켜 설계하는 것을 'RESTful하다'라고 표현한다.
RESTful의 의미를 바탕으로 RESTful API란 REST API의 설계 원칙을 잘 지켜 설계된 API를 말한다.
URI 그 자체로도 어떤 행위를 하는지 알 수 있어야하고,
인간의 문장으로 치환 가능해야 한다.(직관적이다)
REST API의 설계 규칙을 따른다.
REST API는 HTTP Method와 URI를 통해 각 작업을 구분한다.
따라서
GET, POST, DELETE, PUT, PATCH 벌써 5개다.GraphQL 위와 같은 REST API의 단점을 극복할 수 있다.
GraphQL은 하나의 엔드포인트를 사용하고, 모든 요청을 POST메소드를 사용한다.
REST API는 리소스의 특정 항목에 대한 응답을 받을 것인지 선택하지 못해
각 리소스의 모든 데이터가 반환되는 Overfetching이 발생한다.
그러나 GraphQL은 리소스의 특정 항목에 대한 응답을 받을 것인지 선택 가능하다
query: 조회mutation : 추가, 수정, 삭제subscription : 리소스 데이터 업데이트 시 알림클라이언트가 필요로 하는 정보만을 취사선택해서 서버에 요청한다.
Youtube_GraphQL 과 REST API 의 차이점
Velog_@somfist
Velog_@nosenal27
Tistroy_inpa
Tistory_dev-coco
Tistory_hahahoho5915
Naver_codingbarbie