프로젝트를 진행하면서 API를 제공하라는 미션이 있었다.
API? Open API는 들어봤다.
위키피디아에선 이렇게 설명한다
“API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.”
인터페이스(영어: interface, 문화어: 대면부, 결합부) 또는 접속기는 서로 다른 두 개 이상의 독립된 컴퓨터 시스템 구성 요소 간에 정보를 교환하는 공유 경계(shared boundary)이다. 컴퓨터와 사용자 간의 통신(communication)이 가능하도록 하는 장치나 프로그램(device or program)을 의미하기도 한다.
말하자면 API는 컴퓨터나 소프트웨어를 서로 연결하여 애플리케이션 간 통신하도록(=프로그램들이 서로 상호작용하는 것) 도와주는 매개체라고 볼 수 있을 것 같다
API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
: 데이터베이스에는 소중한 정보들이 저장되는데요. 모든 사람들이 이 데이터베이스에 접근할 수 있으면 안 되겠지요. API는 이를 방지하기 위해 여러분이 가진 서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여해줍니다.
API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
: 여기서 애플리케이션이란 우리가 흔히 알고 있는 스마트폰 어플이나 프로그램을 말합니다. API는 애플리케이션과 기기가 데이터를 원활히 주고받을 수 있도록 돕는 역할을 합니다.
API는 모든 접속을 표준화한다.
API는 모든 접속을 표준화하기 때문에 기계/ 운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있습니다. 쉽게 말해, API는 범용 플러그처럼 작동한다고 볼 수 있습니다.
API의 구조에 대해 크게 SOAP와 REST로 나뉘는데 프로젝트에선 REST API를 적용했다
Representational State Transfer의 약자
자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
자원 : 해당 소프트웨어가 관리하는 모든 것 → 문서, 그림, 데이터, 해당 소프트웨어 자체
자원의 표현 : 그 자원을 표현하기 위한 이름 → DB의 학생 정보가 자원일 때, ‘students’를 자원의 표현으로 정한다
구체적인 개념으로는 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
장점
특징
REST(Representational State Transfer)는 네트워크를 통해서 클라이언트-서버 구현을 독립적으로 사용하는 아키텍처 스타일이다. 그래서 실제 전달하려는 내용이 클라이언트와 서버 사이를 오가게 된다.
REST API는 인터넷 식별자(URI)와 HTTP 프로토콜을 기반으로 한다. REST는 HTTP 프로토콜 덕분에 단순함이 핵심이며 웹에 최적화되어 있다. 데이터 포맷으로는 브라우저 간 호환성이 좋은 제이슨(JSON)을 사용하기 때문에 확장성에 뛰어나다.
RESTful이란 일반적으로 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용하는 용어이다. REAT API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다. RESTful은 REST 원리를 따르는 시스템으로 보기도 한다.
RESTful한 API를 구현하는 근복적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이기 때문에 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다
URI를 이용하여 자원을 가리키고 자원에 접근할 수 있도록 한다. REST API 설계자는 자원에 접근할 수 있는 URI를 만들어 클라이언트에 제공해야 한다. URI에서 자원을 구분지어 명명하고, 일관된 형식을 사용하도록 한다. 이는 모호성을 최소화하고 가독성, 유지 관리성을 극대화할 수 있는 방법이며, 사용하기 직관적이고 쉬워진다.
자원을 명사로
자원은 문서, 컬렉션, 스토어, 컨트롤 4가지 범주로 분류할 수 있다.
1 - 정보제공. 웹소켓 통신에서 제대로 오고있는지 브라우저 상에서 서버에 알림을 받았을때
2 - 성공.
3 - 추가적인 동작이 필요할때 리다이렉션의 용도
4 - 클라이언트 에러, 401? 인증 언오쓰라이즈드, 403 폴비든 이 차이도 알고 잇으면 좋을 것 같다. 401. 인증되지 않거나, 만료된 토큰, 403은 인증은 됐는데 범위가 잘못된, 권한 밖의 요청을 보냈을때 에러. 유저인데 매니저 API를 요청한다던가 했을때
5 - 서버 내부 에러. 브라우저로 반환하지않고 서버 내부에서 처리하면 좋다
https://ko.wikipedia.org/wiki/API
https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4
https://blog.wishket.com/api%EB%9E%80-%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85-%EA%B7%B8%EB%A6%B0%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8/
https://infcon.day/%EC%8A%A4%ED%86%A0%EB%A6%AC-restful-api/