URI:Uniform Resource Identifier
해당 사이트의 특정 자원의 위치를 나타내는 유일한 주소
Rest (Representational State Transfer)
모든 resource들을 하나의 EndPoint에 연결해놓고 각 Endpoint는 그 resource와 관련된 내용만 관리하게 하자는 방법론이다.
=>REST란 웹에 존재하는 모든 자원(리소스)에 고유한 URI(Uniform Resource Identifier)를 부여해서 자원에 대한 주소를 지정하는 방법론이다.
웹상에서 사용하는 여러 리소스를 HTTP URI로 표현하고 그 리소스에 대한 행위를 HTTP Method로 정의하는 방식이다.
자원의 표현은 뭘까?
자원(resource)은 해당 소프트웨어가 관리하는 모든 것을 말한다.
예를 들면 문서나 그림,데이터, 해당 소프트웨어 자체 등이 있다.
자원의 표현은 그 자원을 표현하기 위한 이름이다.
상태를 전달한다는 것은 어떠한 의미인가?
데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달한다. JSON혹은 XML을 통해 데이터를 주고받는 것이 일반적이다.
Rest는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
Rest는 네트워크 상에서 Client와 Server사이의 통신 방식 중 하나이다.
구체적으로, HTTP URI를 통해 자원(Resource)을 명시하고 HTTP Method(POST,GET,PUT,DELETE)를 통해 해당 자원에 대한 CRUD Operation(Create,Read,Update,Delete)을 적용하는 것을 의미한다.
API는 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능하도록 하는 것이다.(api는 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 의미한다.)
RESTful API
는 REST기반으로 서비스 API를 구현한 것이다.
형식(주소)만으로 이게 대략 어떤 요청인지 알게 해준다.
REST API 특징
->REST는 HTTP표준을 기반으로 구현하므로 HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
->서버에 REST API로 요청을 보낼 때는 HTTP란 규약에 따라 신호를 전송한다. 이 HTTP로 요청을 보낼 때도 여러 메소드가 있다.(GET,POST,PUT,Delete,Patch)
get: 데이터를 Read, 조회하는데 사용한다
Post:Create,새로운 정보를 추가하는데 사용된다
🎈Restful API를 사용해본 적이 있는지? (예시)
프로젝트 진행 시 백엔드와 API통신하며 약속된 key값을 사용했다. 예를 들면 클라이언트가 서버에게 로그인,회원가입을 요청할 때 API를 통해 백엔드와 소통하며 요청과 응답을 주고 받았다.
RESTful은 일반적으로 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다. REST API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다. REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다!
RESTful의 목적엔 무엇이 있는가?
RESTful하게 API를 디자인한다는 것은 무엇을 의미하는가?
1.리소스와 행위를 명시적이고 직관적으로 분리한다.
- 리소스는 URI로 표현되는데 리소스가 가리키는 것은 명사로 표현되어야 한다.
- 행위는 HTTP Method로 표현하고, GET(조회),POST(생성), PUT(기존 entity 전체 수정), PATCH(기존 entity일부 수정), DELETE(삭제)을 분명한 목적으로 사용한다.
- Message는 Header와 Body를 명확하게 분리해서 사용한다.
- Entity에 대한 내용은 Body에 담는다.
- 애플리에이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보인 API버전 정보, 응답받고자 하는 MIME타입등은 header에 담는다.
- header와 body는 http header와 http body로 나눌 수 있고, http body에 들어가는 json 구조로 분리할 수도 있다.
- API버전을 관리한다.
- 환경은 항상 변하기에 API의 signature가 변경될 수도 있음에 유의하자
- 특정 API를 변경할 때는 반드시 하위호환성을 보장해야 한다.
- 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
- 브라우저는 form-data형식의 submit으로 보내고 서버에서는 json형태로 보내는 식의 분리보다는 json으로 보내든, 둘 다 form-data형식으로 보내든 하나로 통일한다.
- 다른 말로 표현하자면 URI가 플랫폼 중립적이어야 한다.
어떤 장점이 있는가?
1.Open API를 제공하기 쉽다.
2.멀티플랫폼 지원 및 연동이 용이하다.
3.원하는 타입으로 데이터를 주고받을 수 있다.
4.기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
단점은 무엇이 있는가?
1.사용할 수 있는 메소드가 4가지밖에 없다.
2.분산환경에는 부적합하다.
3.HTTP통신 모델에 대해서만 지원한다.
Graph Query Language
여기서 Query Language는 정보를 얻기위해 보내는 질의문을 만들기 위해 사용되는 컴퓨터 언어의 일종
GraphQL은 이런 Query Language 중에서도 Server API를 통해 정보를 주고받기 위해 사용하는 Query Language.
REST방법론이 있는데도 새로운 언어인 GraphQueryLanguage가 등장한 이유는? RESTful API로는 다양한 기종에서 필요한 정보들을 일일히 구현하는 것이 어려웠다.
예를들면, ios와 Android에 필요한 정보들이 조금씩 달랐고 그 다른 부분마다 API를 구현하는 것이 힘들었다. 그래서 정보를 사용하는 측에서 원하는 대로 정보를 가져오고 보다 편하게 정보를 수정하게 하는 표준화된 Query language를 만든 것이다.
RESTful과 어떤 차이를 가지는가?
GraphQL의 장점
1)HTTP요청의 횟수를 줄일 수 있음
언제 GraphQL 혹은 Restful은 사용해야 하는가?
GraphQL
RestfulAPI는 response를 뭉뜽그려서 받아 데이터를 엔지니어가 가공해서 사용하는 반면 GraphQL은 쿼리 조건을 엔지니어가 세세히 설정하여 원하는 결과만 받을 수 있다. Restful API는 endpoint가 여러개이고 qraphQL은 하나이다.
참고:https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://www.holaxprogramming.com/2018/01/20/graphql-vs-restful-api/