API 정의
- 프로그램과 프로그램을 연결시켜주는 매개체
- 서로 다른 프로그램 끼리 통신 ( ex. 모바일 앱에서 외부 카메라, 앨범, 주소록 등등)
- 규칙들의 집합 ( 클라이언트는 접근할 프로그램을 모르더라도 API를 이용해 쉽게 통신 가능)
API - 중개자 역할
- 어떤 상황에서 API는 프로그램과 프로그램 사이의 중개자 역할을 할까요 ?
- 접근할 프로그램의 규칙이 잘 짜이지 않고 복잡한 경우
- 프로그램 보안 상 외부에서 누구나 사용할 수 없고 제한된 기능들을 간접적으로 제공하고 싶을 때
API 서버란 ?
- 규격화 되어 있는 서버
- 데이터베이스를 대신해서 규칙들이 정의 됨 ( ex. 로그인하기, 상품정보 보기, 결제하기 등) => 클라이언트는 데이터베이스가 아닌 API 서버와 통신
참조 : https://maily.so/grabnews/posts/b2341a
API 사용 사례
- 날씨 데이터 같은 공공 데이터를 손쉽게 접근할 수 있도록 국가에서는 기상청 API 제공
- 회사의 DB의 보안 때문에 API 서버를 두고 클라이언트와 통신
REST API 서버
정의
REST는 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미
자원은 해당 SW가 관리하는 모든 것을 의미 : 예를 들면, DB에 들어가 있는 데이터 하나하나, 이미지 하나하나를 의미
자원의 상태 전달은 보통 JSON이나 XML 형태를 이용하여 자원의 상태를 전달함
REST는 HTTP URL을 통해 자원을 명시하고, HTTP Method(POST, GET, DELETE, PUT)를 통해 해당 자원에 대한 CRUD 오퍼레이션을 적용
REST 특징
- Server-Client(서버-클라이언트 구조)
- 자원이 있는 쪽이 Server / 자원을 요청하는 쪽이 Client
-Client : 규칙에 맞게 작업 요청
-Server : 어떤 플랫폼에서 어떻게 사용할지 신경쓰지 않고 요청 데이터만 처리하고 응답
- 서로간 의존성이 줄어든다
- Uniform Interface(인터페이스 일관성)
- Resource(URI)에 대한 요청을 통일되고, 한정적으로 수행하는 아케텍처 스타일을 의미
스프링 스웨거
- API서버를 개발하다 보면, API에 대한 문서를 만드는 것도 일이고, API가 수정될 때마다 문서를 업데이트하는것도 일 => 스웨거를 사용
- 스웨거는 API 스펙을 명세, 관리할 수 있게 해주는 프로젝트
- REST API를 만들 때 문서화를 잘하는 것은 중요
참조 : https://www.gunlog.dev/Spring%20Boot-Swagger