API란 무엇인가? (feat. REST)

Life is ninanino·2023년 12월 11일
0

오늘 또 하나 배웠다

목록 보기
15/17

프로젝트를 진행하면서 API를 제공하라는 미션이 있었다.
API? Open API는 들어봤다.

API가 정확히 무엇인가?

위키피디아에선 이렇게 설명한다

“API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.”

인터페이스?

인터페이스(영어: interface, 문화어: 대면부, 결합부) 또는 접속기는 서로 다른 두 개 이상의 독립된 컴퓨터 시스템 구성 요소 간에 정보를 교환하는 공유 경계(shared boundary)이다. 컴퓨터와 사용자 간의 통신(communication)이 가능하도록 하는 장치나 프로그램(device or program)을 의미하기도 한다.

말하자면 API는 컴퓨터나 소프트웨어를 서로 연결하여 애플리케이션 간 통신하도록(=프로그램들이 서로 상호작용하는 것) 도와주는 매개체라고 볼 수 있을 것 같다

API의 역할은?

  1. API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
    : 데이터베이스에는 소중한 정보들이 저장되는데요. 모든 사람들이 이 데이터베이스에 접근할 수 있으면 안 되겠지요. API는 이를 방지하기 위해 여러분이 가진 서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여해줍니다.

  2. API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
    : 여기서 애플리케이션이란 우리가 흔히 알고 있는 스마트폰 어플이나 프로그램을 말합니다. API는 애플리케이션과 기기가 데이터를 원활히 주고받을 수 있도록 돕는 역할을 합니다.

  3. API는 모든 접속을 표준화한다.
    API는 모든 접속을 표준화하기 때문에 기계/ 운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있습니다. 쉽게 말해, API는 범용 플러그처럼 작동한다고 볼 수 있습니다.

구조

API의 구조에 대해 크게 SOAP와 REST로 나뉘는데 프로젝트에선 REST API를 적용했다

REST는 뭔데?

Representational State Transfer의 약자
자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
자원 : 해당 소프트웨어가 관리하는 모든 것 → 문서, 그림, 데이터, 해당 소프트웨어 자체
자원의 표현 : 그 자원을 표현하기 위한 이름 → DB의 학생 정보가 자원일 때, ‘students’를 자원의 표현으로 정한다
구체적인 개념으로는 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.

장점

  • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API사용을 위한 별도의 인프라를 구출할 필요가 없다
  • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다
  • 서버와 클라이언트의 역할을 명확하게 분리한다
  • 통신 규약이기 때문에 개발자들끼리 규칙을 정할 수 있다
    단점
  • 표준이 존재하지 않는다
  • 사용할 수 있는 HTTP Method 형태가 제한적이다
  • 구형 브라우저에서 지원해주지 못하는 부분이 존재한다

특징

  • 서버-클라이언트 구조. 서로 간 의존성이 줄어든다
  • 무상태
  • 캐시 처리 가능
  • 계층화
  • 인터페이스 일관성
  • 주문형 코드

REST API

REST(Representational State Transfer)는 네트워크를 통해서 클라이언트-서버 구현을 독립적으로 사용하는 아키텍처 스타일이다. 그래서 실제 전달하려는 내용이 클라이언트와 서버 사이를 오가게 된다.
REST API는 인터넷 식별자(URI)와 HTTP 프로토콜을 기반으로 한다. REST는 HTTP 프로토콜 덕분에 단순함이 핵심이며 웹에 최적화되어 있다. 데이터 포맷으로는 브라우저 간 호환성이 좋은 제이슨(JSON)을 사용하기 때문에 확장성에 뛰어나다.

RESTful?

RESTful이란 일반적으로 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용하는 용어이다. REAT API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다. RESTful은 REST 원리를 따르는 시스템으로 보기도 한다.

RESTful한 API를 구현하는 근복적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이기 때문에 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다

URI를 이용하여 자원을 가리키고 자원에 접근할 수 있도록 한다. REST API 설계자는 자원에 접근할 수 있는 URI를 만들어 클라이언트에 제공해야 한다. URI에서 자원을 구분지어 명명하고, 일관된 형식을 사용하도록 한다. 이는 모호성을 최소화하고 가독성, 유지 관리성을 극대화할 수 있는 방법이며, 사용하기 직관적이고 쉬워진다.

자원을 명사로
자원은 문서, 컬렉션, 스토어, 컨트롤 4가지 범주로 분류할 수 있다.

  • 문서 : 문서 자원은 DB의 하나의 레코드, 하나의 객체 인스턴스와 유사한 단일 자원의 개념이다. 단수를 사용하여 문서 자원을 표현한다.
  • 컬렉션 : 서버가 관리하는 리소스 디렉터리이다. 클라이언트에 의해 새로운 리소스 추가가 요청될 수 있다. (POST 사용) 복수를 사용하여 컬렉션 자원을 표현한다
  • 스토어 : 클라이언트가 관리하는 자원 저장소이다. 클라이언트는 API를 이용하여 자원을 넣거나 가져올 수 있고 삭제할 수 있다. 복수를 사용하여 스토어를 표현한다
  • 컨트롤러 : 컨트롤러 자원은 인자와 반환 값, 입력 및 출력이 있는 실행 가능한 함수와 같다. 문서, 컬렉션, 스토어로 해결이 어려운 절차적 실행을 수행하기 위한 모델이다. 특정 자원을 가리키는 것이 아니라 실행인만큼 예외적으로 동사를 사용한다
  • 계층 관계를 나타내기 위해 ‘/’를 사용한다 : URI 경로에 사용한다
  • URI 마지막에 ‘/’를 사용하지 않는다
  • ‘-’(하이픈)을 사용하여 가독성을 높인다
  • ‘_’(언더스코어)는 사용하지 않는다
  • 소문자를 사용한다
  • 파일의 확장자는 사용하지 않는다
  • CRUD 함수 명을 사용하지 않는다
  • 자원의 필터링을 위해서는 쿼리 파라미터를 사용한다

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/

profile
백엔드 프로그래밍을 공부하고 있습니다. AWS, 클라우드 환경에 대해 관심이 많습니다.

0개의 댓글