나의 발자취
API 종류들(SOAP, RESTful, GraphQL, gRPC, WebSocket, Webhook)과 Restful API의 특징 본문
API 종류들(SOAP, RESTful, GraphQL, gRPC, WebSocket, Webhook)과 Restful API의 특징
달모드 2024. 10. 14. 10:31API의 종류
What’s API ? API Types, Most Popular API Services, REST vs SOAP : What’s the Difference
What’s API?
medium.com
1. SOAP API = Simple Object Access Protocol
은 XML기반 프로토콜을 사용하는 API이다.
조금 더 엄격한 보안 구조를 이용해 데이터를 전달하는 API 구조이며, 강한 보안 구조를 가지고 있기 때문에 Rest API보다 설정이 더 어렵다.
2. RESTful API = Representational State Transfer
은 HTTP 프로토콜을 사용하는 API이다.
HTTP 요청인 GET, POST, PUT, DELETE 등과 같은 특정한 메서드를 사용한다.
현대적인 웹기반 앱에서 많이 사용되는 구조적 패턴이다.
3. GraphQL
페이스북이 개발한, REST 기반 API의 엔드포인트를 더 심플하게 만든 API이다.
RESTful API는 여러개의 엔드포인트를 가지고 있지만, GraphQL은 단일 엔드포인트를 가지고 있다.
별도의 언어가 있고, 스키마가 있다. (어떠한 형식의 데이터를 제공해줄 지).
리졸버를 통해서 스키마의 데이터를 보내게 된다.
오늘은 RESTful API를 구현할 것이므로 이제부터는 RESTful API에 대해서만 작성을 해보겠다.
RESTful API 설계 원칙
❑ 슬래시(/) 구분자는 계층 관계를 나타냄
❑ CRUD에는 동사를 사용하지 않음
❑ 적절한 HTTP 메소드 사용
❑ 소문자 사용
❑ URI 에 확장자 사용 안함
❑ 명사에는 단수형보다 복수형 사용
RESTful API 특징
- 자원은 URI를 통해 고유하게 식별
- HTTP 메서드 사용
e.g.
GET /posts
GET /posts/1
POST /posts : 게시글 생성
PUT /posts/1 : 게시글 수정
PATCH /posts/1 : 게시글 일부 업데이트
DELETE /posts/1 : 게시글이 1번인 자원 삭제
- 자원은 JSON, XML 등 다양한 형식으로 표현
- 무상태 : 각 요청은 독립적이며, 서버는 이전 요청의 상태를 저장하지 않음
- 명확한 URI 구조
- HTTP 상태 코드 사용
200: OK
201: 자원 생성 성공
204: 성공했으나 반환할 데이터가 없음
400: 잘못된 요청
401: 인증 실패
- HATEOAS (Hypermedia As the Engine of Application State) - 요청된 자원의 모든 정보를 주는 것
e.g. 요청 URI - /posts/1
응답 JSON
{"id":1, "title":"테스트", "content":"테스트 내용"
"links":{"rel":"self", "link":"www.sdfsdf.wer", "...}
} - 페이징, 필터링, 정렬
- 페이징: GET /posts?page=2&limit=20
- 정렬: GET /posts?sort=asc
- 필터링: GET /posts?key="anything" - 캐싱
Cache-control: max-age = 3600(초) -> 1시간동안 캐싱 - 보안
- JWT (JsonWeb Token) : 로컬 인증
- OAuth2를 이용해서 인증 방식 : 애플/구글/카카오톡/네이버 로그인
- OAuth2의 경우 4가지 방식 중 approve와 prevential를 가장 많이 사용 - 버전관리
- URI를 통한 버전 관리 : GET/v1/posts /v2/posts
- 헤더정보를 통한 버전관리 : GET /posts HEADER --> Accept: application/vnd.company.v1+json
'Backend' 카테고리의 다른 글
RESTful API 설계 후 CURL로 데이터 주고받기 (0) | 2024.10.14 |
---|---|
CURL이란? (8) | 2024.10.14 |
웹 백엔드를 REST api로 변경하기 (0) | 2024.10.04 |
자바스크립트 객체 리터럴 res.render("habit_record_list", { records: rows }); (1) | 2024.10.02 |
SQLite NodeJS 모듈 이용해서 게시판 구현하기 (3) /login (0) | 2024.09.30 |