TIL) Rest API란?

chloe·2020년 12월 26일
0

TIL

목록 보기
22/81
post-thumbnail

기본 배경 지식

URI:Uniform Resource Identifier
해당 사이트의 특정 자원의 위치를 나타내는 유일한 주소

🧐 REST란?

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)을 적용하는 것을 의미한다.

🧐RESTful API란?

API는 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능하도록 하는 것이다.(api는 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 의미한다.)
RESTful API 는 REST기반으로 서비스 API를 구현한 것이다.
형식(주소)만으로 이게 대략 어떤 요청인지 알게 해준다.

  • api는 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 의미한다.

REST API 특징
->REST는 HTTP표준을 기반으로 구현하므로 HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
->서버에 REST API로 요청을 보낼 때는 HTTP란 규약에 따라 신호를 전송한다. 이 HTTP로 요청을 보낼 때도 여러 메소드가 있다.(GET,POST,PUT,Delete,Patch)

  • post,put,patch > Get,Delete
    앞에 3가지 메소드는 body란 메소드가 있어서 정보들을 더 많이 그리고 비교적 안전하게 감춰서 실어보낼 수 있다.

    get: 데이터를 Read, 조회하는데 사용한다
    Post:Create,새로운 정보를 추가하는데 사용된다

🎈Restful API를 사용해본 적이 있는지? (예시)

프로젝트 진행 시 백엔드와 API통신하며 약속된 key값을 사용했다. 예를 들면 클라이언트가 서버에게 로그인,회원가입을 요청할 때 API를 통해 백엔드와 소통하며 요청과 응답을 주고 받았다.

🧐RESTful이란?

RESTful은 일반적으로 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다. REST API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다. REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다!
RESTful의 목적엔 무엇이 있는가?

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
  • RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이다.

RESTful하게 API를 디자인한다는 것은 무엇을 의미하는가?
1.리소스와 행위를 명시적이고 직관적으로 분리한다.

  • 리소스는 URI로 표현되는데 리소스가 가리키는 것은 명사로 표현되어야 한다.
  • 행위는 HTTP Method로 표현하고, GET(조회),POST(생성), PUT(기존 entity 전체 수정), PATCH(기존 entity일부 수정), DELETE(삭제)을 분명한 목적으로 사용한다.
  1. Message는 Header와 Body를 명확하게 분리해서 사용한다.
  • Entity에 대한 내용은 Body에 담는다.
  • 애플리에이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보인 API버전 정보, 응답받고자 하는 MIME타입등은 header에 담는다.
  • header와 body는 http header와 http body로 나눌 수 있고, http body에 들어가는 json 구조로 분리할 수도 있다.
  1. API버전을 관리한다.
  • 환경은 항상 변하기에 API의 signature가 변경될 수도 있음에 유의하자
  • 특정 API를 변경할 때는 반드시 하위호환성을 보장해야 한다.
  1. 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
  • 브라우저는 form-data형식의 submit으로 보내고 서버에서는 json형태로 보내는 식의 분리보다는 json으로 보내든, 둘 다 form-data형식으로 보내든 하나로 통일한다.
  • 다른 말로 표현하자면 URI가 플랫폼 중립적이어야 한다.

어떤 장점이 있는가?
1.Open API를 제공하기 쉽다.
2.멀티플랫폼 지원 및 연동이 용이하다.
3.원하는 타입으로 데이터를 주고받을 수 있다.
4.기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
단점은 무엇이 있는가?
1.사용할 수 있는 메소드가 4가지밖에 없다.
2.분산환경에는 부적합하다.
3.HTTP통신 모델에 대해서만 지원한다.

GraphQL이란?

Graph Query Language
여기서 Query Language는 정보를 얻기위해 보내는 질의문을 만들기 위해 사용되는 컴퓨터 언어의 일종

GraphQL은 이런 Query Language 중에서도 Server API를 통해 정보를 주고받기 위해 사용하는 Query Language.

REST방법론이 있는데도 새로운 언어인 GraphQueryLanguage가 등장한 이유는? RESTful API로는 다양한 기종에서 필요한 정보들을 일일히 구현하는 것이 어려웠다.

예를들면, ios와 Android에 필요한 정보들이 조금씩 달랐고 그 다른 부분마다 API를 구현하는 것이 힘들었다. 그래서 정보를 사용하는 측에서 원하는 대로 정보를 가져오고 보다 편하게 정보를 수정하게 하는 표준화된 Query language를 만든 것이다.

RESTful과 어떤 차이를 가지는가?

  • GraphQL API는 주로 전체 API를 위해서 하나의 Endpoint를 사용한다. 즉, 한번의 요청으로 정확히 가져오고 싶은 데이터를 가져올 수 있게 도와주는 쿼리를 보낼 수 있다. 반면 RESTful API는 Resource마다 하나의 엄격하게 정의된 Endpoint를 가지고 그 Endpoint에서 그 resource에 대한 모든 것을 담당한다.
  • 백엔드에서 지정해놓은 특이 거의 없으니 Graph QL API는 더 유연하다.
  • GraphQL API는 요청할 때 사용한 Query문에 따라 응답의 구조가 달라진다.

GraphQL의 장점
1)HTTP요청의 횟수를 줄일 수 있음

  • RESTful은 각 Resource종류별로 요청을 해야했다. 그러나 GraphQL은 원하는 정보를 하나의 Query에 모두 담아 요청하는 것이 가능하다.
    2)HTTP응답의 size줄일 수 있음
  • RESTful은 응답의 형태가 정해져있고 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다. 그러나 GraphQL은 원하는 대로 정보를 요청하는 것이 가능하다.

언제 GraphQL 혹은 Restful은 사용해야 하는가?
GraphQL

  • 서로 다른 모양의 다양한 요청들에 대해 응답해야할 때
  • 대부분의 요청이 CRUD에 해당할 때
    Restful
  • Http와 Https에 의한 caching 잘 사용하고 싶을 때
  • File전송 등 단순한 Text로 처리되지 않는 요청들이 있을 때
  • 요청의 구조가 정해져 있을 때

    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/

profile
Front-end Developer 👩🏻‍💻

0개의 댓글