[cs] api 와 rest api

·2023년 1월 7일
0

공부한 것

목록 보기
47/58

API

API란 무엇인가요?
API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘입니다. 예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다. 휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시합니다.
[aws - API란 무엇입니까?]

API(애플리케이션 프로그램 인터페이스)는 관련 없는 두 애플리케이션이 서로 통신할 수 있도록 하는 소프트웨어 중개자입니다. 한 프로그램에서 요청이나 메시지를 받은 다음 다른 프로그램으로 전달하고 API가 수행하도록 프로그래밍된 작업을 기반으로 메시지를 번역하고 프로토콜을 수행하는 브리지 역할을 합니다.
[API(애플리케이션 프로그램 인터페이스)란 무엇입니까?]

인터페이스는 접점을 말한다. UI라고 하면 user interface, 사용자가 서비스를 만나는 접점을 의미한다.
api라고 하면 application programming interface, 애플리케이션을 서로 연결하여 서로 통신 할 수 있게 해주는 접점을 말한다. api를 통하면 내부 원리가 어떤지 몰라도 서로 다른 애플리케이션들이 api를 통해 통신할 수 있다.

또 다른 말로 표현하면

  • 프로그래밍 언어에서 제공하는 기능을 제어할 수 있게 만든 인터페이스
  • 프로그래밍에 있어 누구나 쉽게 접근하여 정보를 공유하기 위해 만들어진 규격

이라고도 할 수 있다. 추상적인 단어다 보니 두루뭉실한 것 같아 내가 보고 이해됐던 표현을 모두 가져왔다..ㅎ

api의 역할

api는 서버와 데이터베이스에 대한 출입구 역할을 한다.

서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여한다.

api는 모든 접속을 표준화한다.

기기와 운영체제에 상관없이 누구나 동일한 액세스를 얻을 수 있게하고 재사용을 쉽게 해준다.

api의 접근 방식에 따른 종류

private api

기업 등 단체 내부에서만 사용하는 노출되지 않는 api

public api

모두에게 공개되는 api, public 중에서도 접속하는 대상에 대한 제약이 없는 경우를 open api라 한다.

partner api

권한을 가진 특정인(파트너)들만 사용할 수 있는 api

REST

REST(Representational State Transfer)란?
자원의 표현에 의한 상태 전달

  • 문서, 그림, 데이터 등의 자원을 이름으로 구분하여 해당 자원의 상태, 정보를 주고 받는 것을 의미한다.
  • HTTP 요청을 할 때 어떤 URI에 자원(Resource)을 명시함과 함께 HTTP Method를 활용해서 해당 자원에 대한 CRUD를 적용하는 것을 의미한다.
  • 어떤 HTTP Method를 사용할 지에 대한 개발자 사이에 사용되는 약속
  • 네트워크 상에서 Client 와 Server 사이의 통신 방식 중 하나

HTTP Method: POST, GET, PUT, DELETE

자원의 표현

  • 자원 : 해당 소프트웨어가 관리하는 모든 것
  • 자원의 표현 : 그 자원을 표현하기 위한 이름

Ex) DB의 학생 정보가 자원일 때, 'students'를 자원의 표현으로 정함

상태(정보) 전달

  • 데이터가 요청되어지는 시점에 자원의 상태를 전달
  • JSON 혹은 XML을 사용하는 것이 일반적

장단점

  • 장점
    • HTTP 프로토콜의 인프라를 그대로 사용하므로 별도의 인프라를 구축할 필요가 없다.
    • HTTP 프로토콜을 따르는 모든 플랫폼에서 사용이 가능하다.
    • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도를 파악하기 쉽다.
    • 서버와 클라이언트 역할을 명확하게 분리
  • 단점
    • 표준이 존재하지 않는다.
    • 사용할 수 있는 메소드가 4가지 뿐이다.(HTTP Method)
    • 구형 브라우저에서 아직 제대로 지원하지 못하는 부분이 존재한다.(PUT, DELETE)

REST API

위의 REST 방식 기반으로 API를 구현한 것을 REST API라고 부른다. 그리고 REST 아키텍쳐를 구현하는 웹 서비스를 RESTful하다고 표현한다.

설계 기본 규칙

  • URI는 자원의 정보를 표시해야 한다.

    • 자원은 동사보다는 명사를 사용
    • 자원은 대문자보다 소문자를 사용
    • 자원의 도큐먼트 이름은 단수 명사를 사용
    • 자원의 컬렉션 이름은 복수 명사를 사용
    • 자원의 스토어 이름은 복수 명사를 사용
  • 자원에 대한 행위는 HTTP Method로 표현한다.

    • URI에 HTTP Method가 들어가면 안된다.

      GET /members/delete/1 -> DELETE /members/1
    • URI에 행위에 대한 동사 표현이 들어가면 안된다.(CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.)

      GET /members/show/1 -> GET /members/1
      GET /members/insert/2 -> POST/members/2
    • 경로 부분 중 변하는 부분은 유일한 값으로 대체한다(:id는 하나의 특정 자원을 나타내는 고유값이다.)

      Ex) student를 생성하는 route:POST/students
      Ex) id=12인 student를 삭제하는 route:DELETE/students/12

  • 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.

    http://restapi.example.com/houses/apartments
  • URI 마지막 문자로 슬래시를 포함하지 않는다.

    http://restapi.example.com/houses/apartments/ (x)
  • URI가 다르면 자원이 다르다는 뜻이고, 자원이 다르면 URI도 달라져야 한다.

    • URI에 포함되는 모든 글자는 자원은 유일한 식별자로 사용되어야 한다.
  • 불가피하게 긴 URI를 사용하게 되면 하이픈(-)을 사용한다.

  • 언더바(_)는 사용하지 않는다.(밑줄 때문에 가려질 수도 있음)

  • 파일 확장자는 URI에 포함하지 않는다.

  • 소문자를 사용한다.

RESTful하지 못한 경우

  • CRUD 기능을 모두 POST 로만 처리하는 API
  • route에 resource, id 외의 정보가 들어가는 경우

참고자료

0개의 댓글