앞선 게시글에서도 언급했지만 웹의 본질은 요청
과 반환
, Request
와 Response
다.
HTTP 상에서 웹의 본질인 요청과 반환을 위해서는 REST API
를 사용하는데, 몇가지 단점 보완을 위해
GraphQL
도 사용한다.
REST
는 철학이다
REST
는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한
소프트웨어 아키텍처의 한 형식으로
REST
는 웹의 기존 기술과 HTTP
프로토콜을 그대로 활용하기 때문에REST
는 네트워크 상에서 Client
와 Server
사이의 통신 방식 중 하나이다.REST
는 RE
presentational S
tate T
ransfer의 약자로
자원을 이름으로 구분해 해당 자원의 상태(정보)를 주고받는 모든 것을 의미하는데,
자원
의 표현
에 의한 상태
전달 이란
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
, /members
URI에 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