Network

API vs HTTP API vs REST API

dev-rootable 2023. 7. 10. 20:31

📌 API(Application Programming Interface)

 

🔎 Interface란?

 

사물과 인간 사이의 경계에서 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜

 

🔎 정의 및 개념

 

애플리케이션(응용 프로그램)에서 다른 프로그램이 제공하는 기능을 사용할 수 있게 만든 매개체

 

서버는 프로그램이나 사용자 측에서 접근 및 제어할 수 있는 데이터나 기능을 API로 만들고, 접근 권한이 있는 개발자나 애플리케이션에서 해당 API를 통해 정의된 기능을 사용할 수 있다.

 

✔ 개념 도면과 예시

 

개념 도면

 

  1. 서버는 DB 서버에 금융 관련 정보를 저장
  2. DB의 데이터를 통해 특정 목적을 위한 기능(API)들을 개발
    • 적절한 접근 권한 부여
    • 다른 애플리케이션에서 기능을 활용할 수 있도록 함
  3. Web application 또는 Android application 등에서 해당 기능에 접근
  4. Web은 이 기능을 통해 "오늘의 금융 지식"이라는 서비스를 개발
  5. App은 이 기능을 통해 "원달러 환율 조회"라는 서비스를 개발

 

📌 HTTP API

 

HTTP를 사용하여 프로그램끼리 소통하는 API

 

HTTP라는 통신 규칙으로 소통하는 API

 

📌 REST API(Representational State Transfer API)

 

REST는 HTTP를 잘 활용하기 위한 원칙이며, REST API는 이 원칙을 준수해 만든 API이다.

 

HTTP의 모든 자원에 이름과 행위를 정의하여 객체화된 서비스를 제공하는 것

 

🔎 RESTful 설계

 

  • HTTP URI를 통해 자원을 표현
  • HTTP 메서드를 통해 해당 자원의 상태(행위)를 정의

 

🔎 예시

 

GET /posts/update/2 (x)
PUT /posts/2 (o)

 

URI는 자원을 표현하는데 집중해야 하며, 행위에 대한 표현은 메서드를 사용하여 표현해야 한다. 위 예시처럼 'update'라는 행위에 대한 표현보다 PUT 메서드를 사용하고, 어떤 자원을 수정할 것인지 ID 값 '2'를 주는 방식으로 URI를 설계해야 한다.

 

🔎 참고하면 좋은 설계 개념

 

Collection/Document/Store/Controller

 

✔ Collection

 

단일 리소스(Document)들의 집합

 

일반적으로 새로운 자원을 추가하거나 다량의 리소스가 필요할 때 Collection을 호출

 

일반적으로 복수 명사로 표현

 

http://.../members

 

✔ Document

 

단일 리소스(하나의 객체)

 

REST에서는 리소스 집합 중 하나로 표현되며 일반적으로 단수 명사로 표현

 

자원의 집합 중 하나를 지정하는 것

 

http://.../members/3
http://.../files/star.jpg

 

✔ Store

 

클라이언트가 관리하는 자원 저장소

 

클라이언트가 리소스의 URI를 알고 관리

 

일반적으로 복수로 이름을 짓는다.

 

쇼핑몰의 경우, 장바구니나 위시리스트가 해당된다.

 

http://.../users/5/carts
http://...users/2/wishes

 

Reference:

https://oktroco.github.io/development/etc/2019/12/27/restapi-rule/

 

REST API

REST API 설계 기본 규칙

oktroco.github.io

 

✔ Controller

 

문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행

 

CRUD를 제외한 특정 기능을 요청한다.

 

절차적인 개념으로 URI 마지막에 동사를 사용하여 나타낸다.

 

http://.../items/5/register

 

Reference:

https://m.blog.naver.com/whdgml1996/221706090913

 

[web 01] RESTful API 적용하기

지난 학기 모 회사 인턴을 지원하면서 REST API를 사용했다고 이력서에 적은 적이 있었는데, 막상 ...

blog.naver.com

 

🔎 장점

 

Java에서는 모든 객체를 상태와 행위로 추상화시킨 클래스로 정의한다. 이러한 클래스를 보고 개발자는 어떤 자원을 갖고 어떤 일을 하는지 식별할 수 있다. 또한, 쓰임새를 알기 때문에 다른 자원과 어떻게 협력할지 고민하고, 그 협력을 통해 어떤 서비스를 제공할지 설계한다. HTTP의 모든 자원도 이런 식의 개념을 도입하면 별도의 도구 없이 빠르고 쉽게 자원 식별이 가능하다. 필자가 생각하는 장점은 다음과 같다.

 

1. 별도의 도구 없이 웹에서 사용할 수 있다.

 

2. 모든 자원의 쓰임새를 빠르고 쉽게 인지할 수 있어 설계와 개발 생산성을 높인다.

 1) 개발 자원을 명명하는데 참고할 수 있다.

 2) 스프링의 경우, 어떤 자원들을 모아놓고 컨트롤러를 작성할지 판단하는데 도움이 된다.

 3) 개발하고자 하는 모든 URI(페이지)에 대한 명명 지침이 된다.

 

3. 유지보수성이 높아진다.

 

📌 HTTP API vs REST API

 

[모든 개발자를 위한 HTTP 웹 기본 지식 Q&A]

김영한 강사님 답변:

HTTP API와 REST API는 거의 같은 의미로 사용된다.

 

HTTP API는 HTTP를 사용해서 서로 정해둔 규칙으로 데이터를 주고받는 넓은 의미의 개념인데, 여기에 제약 조건이 추가된 것이 REST API이다.

 

4가지 제약 조건

 

  • 자원의 식별
  • 메시지를 통한 리소스 조작
  • 자기 서술적 메시지
  • 애플리케이션의 상태에 대한 엔진으로써 하이퍼미디어

 

마지막 부분이 가장 구현하기 어려운데 이를 완벽하게 지키면서 개발하는 것을 RESTful API라고 부른다. 실무에서 이런 방법으로 개발하는 것은 현실적으로 어렵고,
개발 비용대비 효과가 있는 것도 아니다.

 

그런데 이미 많은 사람들이 해당 조건을 지키지 않아도 REST API라고 하기 때문에 HTTP API와 거의 같은 의미로 사용하고 있다. 하지만 엄격하게는 위 제약 조건을 모두 지켜야 REST API라고 할 수 있다.

 

References:

https://bentist.tistory.com/37

 

API, HTTP API, REST API 차이

기상청 날씨정보 API, 증권 API, 지도 API 등등 막연하게 API란 단어를 들어왔다. API를 가져다 써, API로 개발한다 등등 개념은 제대로 모르며 사용 해왔기에 이번엔 API에 대해 개념적으로 정리해보고

bentist.tistory.com

 

https://www.inflearn.com/questions/126743/http-api-vs-rest-api

 

HTTP API vs REST API - 인프런 | 질문 & 답변

HTTP API를 기반으로 한 것이 REST API인가요? 무슨 차이가 있는지 궁금합니다. - 질문 & 답변 | 인프런

www.inflearn.com