API 란?
API는 Application Programming Interface의 약자로, 소프트웨어 응용 프로그램에서 다른 소프트웨어 구성 요소 또는 서비스와 상호 작용하기 위한 인터페이스를 제공하는 프로그래밍 기술이다.
여기서 인터페이스는 두 소프트웨어 응용 프로그램 간의 서비스 계약이라고 할 수 있고, 이 계약은 ‘요청’과 ‘응답’을 사용하여 두 응용 프로그램이 서로 통신하는 방법을 정의한다.
쉽게 말하면, API는 두 소프트웨어의 구성 요소가 서로 통신할 수 있게 하는 메커니즘이라고 할 수 있다.
예를 들면, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있고, 휴대폰의 날씨 앱에서는 API를 통해 이 시스템과 통신하여 일일 날씨 정보를 표시해 주는 것이다.
📌 API 역할
- 서버와 데이터베이스에 대한 출입구 역할을 한다.
- 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
- 모든 접속을 표준화한다.
📌 API 종류
✏️ 아키텍처 스타일에 따른 분류
API는 생성된 시기와 이유에 따라 4가지 방식으로 작동
-
SOAP API
- SOAP API는 단순 객체 접근 프로토콜을 사용하며, 클라이언트와 서버는 XML을 사용하여 메시지를 교환
- 현재보다 과거에 더 많이 사용되었으며 유연성이 떨어지는 API임.
-
RPC API
- RPC API는 원격 프로시저 호출이라고도 하며, 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송하는 형태
-
Websocket API
- Websocket API는 JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 API, 구독형 API라고도 할 수 있음.
- 클라이언트와 서버 간의 양방향 통신을 지원하며, 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적임.
-
REST API
- 오늘날 웹에서 볼 수 있고 가장 많이 사용되고 있는 유연한 API
- 클라이언트가 서버에 요청을 데이터로 전송하면 서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환함.
✏️ 접근 방식, 사용 범위에 따른 분류
-
프라이빗 API
- 프라이빗 API는 내부 API로, 기업 내부에 있으며 비즈니스 내에서 시스템과 데이터를 연결하는 데만 사용
- 제3자에게 노출 X
-
퍼블릭 API
- 퍼블릭 API는 개방형 API로, 모두에게 공개되며 누구나 사용 가능
- 누구나 제한 없이 API를 사용할 수 있지만, API와 관련된 권한 부여와 비용이 있을 수도 있고 없을 수도 있음.
-
파트너 API
- 기업이 데이터 공유에 동의하는 특정인들만 사용 가능
- 주로 비즈니스 관계에서 사용되며, 종종 파트너 회사 간에 소프트웨어를 통합하기 위해 사용되기도 함.
-
복합 API
- 복합 API는 두 개 이상의 서로 다른 API를 결합하여 복잡한 시스템 요구 사항이나 동작을 처리
📌 API 장단점
✏️ 장점
-
데이터 접속의 표준화와 편의성
- 접근 방식에 따른 퍼블릭 API와 파트너 API 등의 종류들에서 알아봤듯이 API는 모든 접속을 표준화하기 때문에 디바이스/운영체제 등과 상관없이 조건만 맞다면, 누구나 동일한 액세스를 약속함.
- 개발 시 API를 사용하면, 필요한 기본 기능들을 매번 개발/업데이트할 필요 없이 손쉽게 이용 가능
-
자동화와 확장성
- API를 통한 CRUD 처리에 따라 관련 데이터와 콘텐츠가 자동으로 생성되고 사용자의 환경에 맞춰서 정보가 전달되어 개발 워크플로우가 간소화되고 애플리케이션 확장이 용이
- 예를 들면, API를 활용한 웹 사이트 분석, 프로젝트 및 팀 관리 도구, 온라인 결제 시스템, 기타 여러 운영 솔루션에 필요한 애플리케이션을 다소 쉽게 작성할 수 있음
-
적용력
- API는 변화 예측에도 큰 도움이 되기 때문에, API를 통해 데이터를 수집하고 전달하는 데 있어 유연한 서비스 환경을 구축하고 소프트웨어를 통합하거나 협업이 필요할 때 더욱 용이
✏️ 단점
-
보안성과 HTTP 방식의 제한
- API의 단일 진입점인 API 게이트웨이는 해커의 타겟 대상이 될 수 있음. 즉, 평범한 HTTP 메서드를 사용하여 액세스할 수 있다는 장점이, 보안성에 관해서는 크나큰 단점이 될 수 있음
-
표준의 부재와 개발 비용
- REST API의 설계에 있어 가장 큰 단점이라고 할 수 있는 공식화된 표준이 존재하지 않는다는 점임.
- 따라서 관리가 어렵고, 실제 API 기능을 구현하고 제공하려면 개발 시간, 지속적인 유지 관리, 요구 사항 및 지원 제공 측면에서 비용이 많이 들 수 있음
- 또한 기존 API의 기능을 확장하려고 할 때, 광범위한 프로그래밍 지식이 필요함
📌 API 엔드포인트
API 엔드포인트는 API 호출이 수행되는 곳을 뜻하며, 해당 API를 호출할 때의 URL이라고 이해하면 쉽다.
REST API 란?
REST API란 말 그대로 REST 형식의 API를 말하며, 핵심 컨텐츠 및 기능을 외부 사이트에서 활용할 수 있도록 제공되는 인터페이스이다.
📌 REST란?
REST란 Representational State Transfer의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.
💡 즉, REST는
1. HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고,
2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미
++) CRUD Operation
: Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말로, REST에서의 CRUD Operation 동작 예시는 다음과 같다.
- Create : 데이터 생성(POST)
- Read : 데이터 조회(GET)
- Update : 데이터 수정(PUT, PATCH)
- Delete : 데이터 삭제(DELETE)
📌 REST의 구성 요소
자원(Resource), 행위(Verb), 표현(Representations)의 3가지 요소로 구성
-
자원 (Resource)
- 모든 자원에 고유한 ID가 존재하고, 이 자원은 서버에 존재
- 자원을 구별하는 ID는
/orders/order_id/1
와 같은 HTTP URI
-
행위 (Verb)
-
표현 (Representations)
- 클라이언트가 자원의 상태에 대한 조작을 요청하면 서버는 이에 적절한 응답을 보냄
- REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 응답으로 나타낼 수 있으며, 현재는 JSON으로 주고받는 것이 대부분임
-
HTTP Method
📌 REST 특징
-
클라이언트 / 서버 구조
- 클라이언트는 유저와 관련된 처리를, 서버는 REST API를 제공함으로써 각각의 역할이 확실하게 구분되고, 일괄적인 인터페이스로 분리되어 작동할 수 있게 함
⇒ 서로 간 의존성이 줄어듦
-
무상태성
- HTTP의 특성을 이용하기 때문에 무상태성을 가짐
- 즉, 서버에서 어떤 작업을 하기 위해 상태정보를 기억할 필요가 없고 들어온 요청에 대해 처리만 해주면 되기 때문에 구현이 쉽고 단순
-
캐시 처리 가능
- HTTP라는 기존 웹 표준을 사용하는 REST의 특징 덕분에 기본 웹에서 사용하는 인프라를 그대로 사용할 수 있음
- 대량의 요청을 효율적으로 처리하기 위해 캐시가 요구됨
⇒ 캐시 사용을 통해 응답시간이 ⬆️, REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상 시킬 수 있음
-
자체 표현 구조
- JSON을 이용한 메시지 포맷을 이용하여 직관적으로 이해할 수 있음
- REST API 메시지만으로도 그 요청이 어떤 행위를 하는지 확인 가능
-
계층화
- 클라이언트와 서버가 분리되어 있기 때문에 중간에 프록시 서버, 암호화 계층 등 중간매체를 사용할 수 있어 자유도가 높음
-
유니폼 인터페이스
- HTTP 표준에만 따른다면 모든 플랫폼에서 사용이 가능하며, URI로 지정한 리소스에 대한 조작을 가능하게 하는 아키텍처 스타일을 뜻함.
- 특정 언어나 기술에 종속되지 않음
📌 REST API 설계
✓ REST 중심 규칙
- URI는 정보의 자원을 표현해야 한다.
- 리소스명은 동사보다는 명사 사용.
- URI는 자원을 표현하는 데 중점을 두어야 하며, get 같은 행위에 대한 표현이 들어가서는 안 됨.
- 자원에 대한 행위는 HTTP Method (GET, POST, PUT, DELETE 등)으로 표현한다.
✓ 세부 규칙
- 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용
- URI 마지막 문자로 슬래시(/) 포함 x
- 하이픈(-)은 URI 가독성을 높이는 데 사용
- 밑줄(_)은 URI에 사용 x
- URI 경로에는 소문자가 적합
- 파일 확장자는 URI에 포함하지 x
📌 Collection, Document
- Collection
- Document
- 단순히 문서로 이해해도 되고, 한 객체라고 이해해도 좋음
➡️ 컬렉션과 도큐먼트는 모두 자원(리소스)이라고 표현할 수 있으며, URI에 표현됨.
사용 예시)
http://restapi.example.com/sports/soccer
=> sports 컬렉션, soccer 도큐먼트로 표현
http://restapi.example.com/sports/soccer /player/13
=> sports, player 컬렉션, soccer, 13 도큐먼트로 표현
=> 컬렉션은 복수로 사용 중
📌 HTTP 응답 상태 코드
리소스에 대한 응답 확인하기
⇒ 정확한 응답의 상태코드만으로도 많은 정보를 전달할 수 있기 때문에 응답의 상태코드 값을 명확히 돌려주는 것은 중요!
📎 참고
https://aws.amazon.com/ko/what-is/api/
https://stdio-han.tistory.com/88
https://blog.wishket.com/api란-쉽게-설명-그린클라이언트/
https://www.cloudflare.com/ko-kr/learning/security/glossary/what-is-endpoint/
https://www.hanl.tech/blog/api란-api의-정의와-종류-장단점/
https://velog.io/@min-zi/Web-API-엔드포인트란
https://gapal.tistory.com/24
https://khj93.tistory.com/entry/네트워크-REST-API란-REST-RESTful이란
https://velog.io/@somday/RESTful-API-이란
https://poiemaweb.com/js-rest-api
https://inpa.tistory.com/entry/WEB-🌐-REST-API-정리#rest_구성