- 우리가 Rest-api와 Graphql-api를 알아보기 전에 API가 뭔지 알아보자~~
- 진짜 이 그림 만큼 잘 표현한게 없는거 같아!! 쉽게 말하면, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체야.
- 역할 :
1. API는 서버와 데이터베이스에 대한 출입구
- API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 해줘
- API는 모든 접속을 표준화 => 범용 플러그처럼 작동한다고 보면 돼.
- 장점 : Private API를 이용할 경우, 개발자들이 애플리케이션 코드를 작성하는 방법을 표준화함으로써, 간소화되고 빠른 프로세스 처리를 가능한다. 또한, 소프트 웨어를 통합하고자 할 때는 개발자들 간의 협업을 용이하게 만들어줄 수 있다. public API와 partner API 를 사용하면, 기업은 타사 데이터를 활용하여 브랜드 인지도를 높일 수 있고, 고객 데이터베이스를 확장하여 전환율까지 높일 수 있다.
1. 정의 : 모든 Resource (자료, User, …) 들을 하나의 Endpoint 에 연결해놓고,
각 Endpoint 는 그 Resource 와 관련된 내용만 관리하게 하자는 방법론.
즉 자원(resource)의 표현(representation)에 의한 상태 전달.
좁은 의미로, HTTP를 통해 CRUD(Create, Read, Update, Delete)를 실행하는 API를 뜻한다.
2. 자원(Resource) :
해당 소트웨어가 관리하는 모든 것.
자원의 표현은 그 자원을 표현하기 위한 이름으로 예를들어 DB의 유저정보가 자원이라면 user를 자원의 표현으로 정한다.
3. 개념 :
HTTP URI를 통해 자원을 명시하고 , HTTP Method(post,get,put,delete)를 통해 해당자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
4. 예시 :
예시로 어떤 API가 Community site용 API이며, 이 API를 통해 사용자들이 글을 CRUD 할 수 있고 각 댓글에도 작성/수정/삭제 할 수 있다고 해보자
이때 API 의 Endpoint 를 다음과 같이 구성하면 REST 의 조건을 간략히는 만족하게 된다.
ex)글 관련 API = /posts
글 작성 = POST /posts
글 수정 = PATCH /posts/[postid]
글 삭제 = DELETE /posts/[postid]
댓글 관련 API = /posts/[postid]/comments
댓글 작성 = POST /posts/[postid]/comments
댓글 수정 = PATCH /posts/[postid]/comments/[commentid]
댓글 삭제 = DELETE /posts/[postid]/comments/[commentid]
- 정의 : 이런 REST 의 조건을 만족하는 API 를 RESTful API 라고 부르고, 이런 방식으로 API 를 작성하는 것을 RESTful 하다고 한다. 즉, Restful하다라는 것은 REST API의 설계 의도를 명확하게 지켜주는 것. 슬래시를 통해 계층관계를 표시한다던가, 숫자는 id를 나타내는것, 동사보단 명사를 위주로 쓰는것 등이다.
2. 장점 :
2-1 : REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍쳐 스타일이야.
2 - 2 : 인프라 구축필요X, HTTP프로토콜을 따르는 모든 플랫폼에서 호환된다.(범용성)
2 - 3 : REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
2 - 4 : 서버와 클라이언트의 역할을 명확하게 분리한다.
3. 단점 :
3 - 1 : 표준이 존재하지 않는다.
3 - 2 : 사용할수 있는 메소드가 4가지 밖에 없다.
3 - 3 : 구형의 브라우저가 아직 지원하지 못하는 부분이 존재한다.
3 - 4 : 특정 부분만을 가져갈 수 없다. 중요!!
요약 => REST API는 클라이언트 서버 프로토콜을 사용하기 때문에 (주로 HTTP)
REST ? 웹상에서 사용되는 여러 리소스를 stateless 클라이언트 서버 프로토콜중에서 HTTP URI 로 표현하고 그 리소스에 대한 행위를 HTTP method로 정의하는 것
URI ? 해당 사이트에 특정 자원에 위치를 나타내는 유일한 주소 ( EX) 나 )
URL ? URI가 URL을 양식으로 사용한다 ex)내가 있는 장소 , 장소로 표현
naver.com/ => URI
naver.com/sports/ => URI
1. 정의 : Graph Query Language의 줄임말이다.
Query Language는 정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해 사용되는 Computer 언어의 일종이다.
= > GraphQL은 이런 Query Language 중에서도 Server API를 통해 정보를 주고받기 위해 사용하는 Query Language이다.
2. RESTful과의 차이점 :
2 - 1 : 주로 전체 API를 위해서 하나의 Endpoint를 사용한다.(RESTful API는 Resource 마다 하나의 Endpoint
2 - 2 : GrapghQL API는 요청할 때 사용한 Query 문에 따라 응답의 구조가 달라진다.
2 - 3 : 유연하다. 왜냐하면, 백엔드에서 지정해 놓은 틀이 거의 없기 때문이다.
3. 장점 :
3 - 1 : HTTP 요청의 횟수를 줄일 수 있다.
3 - 2 : HTTP 응답의 Size를 줄일 수 있다.
4. 단점 :
4 - 1 : File 전송 등 Text 만으로 하기 힘든 내용들을 처리하기 복잡하다.
4 - 2 : 고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가 RESTful API 의 경우보다 더 커진다.
4 - 3 : 재귀적인 Query 가 불가능하다. (결과에 따라 응답의 깊이가 얼마든지 깊어질 수 있는 API 를 만들 수 없다.)
요약 = > Rest의 비해 특정한 부분만 쏙쏙 골라서 처리 할 수 있다.
= > 언뜻 보기에, Rest는 GraphQL에 비해 비효율적으로 보인다. 하지만, 우리가 Rest를 알아야 하는 이유가 있다.
첫번째로,국내에서는 일반적인 서비스에서 그만큼의 트래픽이 발생하지 않는다.
두번째, GraphQL을 쓰려면, 이 것을 쓰는 개발자를 뽑아야 하는데, 회사에서 교육시킬 여건도 잘 없다고 한다.
세번쨰, 공공API, Public api(open-api)는 무료로 제공되는데, 이것은 일반적으로 Rest-api를 쓴다.