나의 발자취

API 종류들(SOAP, RESTful, GraphQL, gRPC, WebSocket, Webhook)과 Restful API의 특징 본문

Backend

API 종류들(SOAP, RESTful, GraphQL, gRPC, WebSocket, Webhook)과 Restful API의 특징

달모드 2024. 10. 14. 10:31

API의 종류

출처: https://medium.com/@yusufacarr18/whats-api-api-types-most-popular-api-services-rest-vs-soap-what-s-the-difference-1bd6a685afa1

https://medium.com/@yusufacarr18/whats-api-api-types-most-popular-api-services-rest-vs-soap-what-s-the-difference-1bd6a685afa1

 

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

Comments