restapi

  • rest api는 rest를 기반으로 만들어진 api를 의미.
  • rest와 rest api, restful api들을 정리해보자.

REST

  • Representational State Transfer의 약자
    • 자원을 이름으로 구분하여 자원의 상태를 주고 받는것
  • 2000년 컴퓨터 과학자 Roy Fielding 박사가 박사 학위 논문에서 처음 정의
    • 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침
  • 아키텍처 스타일을 구성하는 제약 조건 집합
  • HTTP URI를 통해 자원을 명시
  • HTTP Method를 통해 CRUD Operation을 적용하는 것을 의미

구성요소

  • HTTP URI
    • 자원
  • HTTP Method
    • 자원에 대한 행위
    • Create(Post)
    • Read(GET)
    • Update(PUT)
    • Delete(DELETE)
  • HTTP Message Pay Load
    • 자원에 대한 행위의 내용

설계기준

  • server-client 구조
    • 서로 독립적인 구조로 만들어진다.
    • http를 통해서만 서버와 클라이언트가 통신한다.
  • stateless
    • 상태를 저장하지 않아 요청마다 필요한 정보를 넣어줘야 한다.
    • 서버의 세션을 필요로 하지 않는 의미
  • cacheable
    • 캐싱허용이 가능하여 캐시가 가능하다.
    • 클라이언트의 성능향상과 서버의 확장성을 높일 수 있다.
  • layered system 계층화
    • 호출과 응답이 서로 다른 계층을 거친다.
    • 클라이언트나 서버가 최종어플리케이션과 통신하는지, 중개자와 통신하는지 알수없도록 설계해야 한다.
  • uniform interface 인터페이스 일관성
    • 동일한 리소스에 대한 모든 api요청은 출처에 관계없이 동일하게 표시
    • 리소스가 너무 크지않도록, 필요로하는 정보는 포함되도록 해야 한다.

장단점

  • 장점
    • http 인프라를 사용하여 별도의 인프라 구축이 없다.
    • http 프로토콜을 따르는 플랫폼에서 사용이 가능
    • rest api가 의도를 파악하고 쉽게 익힐수있다.
  • 단점
    • 표준이 존재하지 않아 정의가 필요
    • http method가 제한적
    • 구형브라우저와 호환되지 않을수 있다.

REST API

  • REST 의 원리를 따르는 API
  • REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라 부른다.
  • RESTful API, RESTful 웹 API, REST API 용어들은 같은 의미로 사용할 수 있다.
  • rest 설계규칙을 지킨 시스템을 RESTFul하다 할 수 있다.
    • rest의 설계규칙을 못지키면 rest api를 사용하지만, restful하지 않다고 할 수 있다.
  • 설계규칙 예시
    • get, post, put, delete를 행위 목적으로 잘 활용
    • uri는 행위를 표시하지 않기
    • 대문자보다는 소문자 활용
    • 언더바 대신, 하이픈 사용
    • 마지막에 슬래시는 사용않기
    • 파일확장자 url포함 하지 않기
    • 명사를 사용하며, 컨트롤 자원을 의미하면 예외적으로 동사 사용
    • 영어는 복수형으로 사용하기

다른 참고할 내용

  • REST API와 다른 사용법으로 GraphQL도 존재
  • REST와 SOAP도 비교하기도 한다.

참고

  • https://www.ibm.com/kr-ko/topics/rest-apis
  • https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
  • https://aws.amazon.com/ko/what-is/restful-api/
  • https://www.redhat.com/ko/topics/api/what-is-a-rest-api
  • https://dev-cool.tistory.com/32