hongcheol / CS-study

cs지식을 정리하는 공간
MIT License
248 stars 30 forks source link

REST API #115

Open jslee7420 opened 3 years ago

jslee7420 commented 3 years ago

REST API는 REST(REpresentational State Transfer) 아키텍처 스타일을 준수하는 API입니다. REST API에 대해 이해하기 위해 먼저 API와 REST가 각각 무엇을 나타내는지 살펴봅시다.

API

API(Application Programming Interface)는 응용 프로그램에서 사용할 수 있도록, 운영 체제, 프로그래밍 언어 또는 특정 서비스가 제공하는 기능을 제어할 수 있게 만든 인터페이스입니다.

인터페이스

서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면입니다. 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미합니다. 예를 들어 사람과 컴퓨터는 키보드, 모니터, 마우스와 같은 인터페이스를 통해 정보와 신호를 주고 받습니다.

REST

REST는 HTTP를 이용해서 기계간의 통신이 일어날때 HTTP의 잠재력을 최대한으로 이끌어내는 소프트웨어 아키텍처의 한 형식입니다. HTTP를 이용하는 모범 방법론이라고 할 수 있습니다. 아키텍쳐 스타일은 일반적인 표준이나 프로토콜과는 다르다는 점을 주의해야합니다.

최근의 서버 프로그램은 여러 웹 브라우저 뿐만 아니라 아이폰, 안드로이드 앱 통신에 대응해야 합니다. 즉 멀티 플랫폼, 멀티 디바이스를 지원해야하는 것입니다. 그렇기 때문에 매번 서버를 새로 만드는 수고를 들이지 않기 위해선 범용적인 사용성을 보장하는 서버 디자인이 필요합니다. REST 는 이러한 범용성을 보장하는 아키텍쳐입니다.

구체적으로 REST는 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미합니다.

리소스는 서버에 있는 데이터를 말합니다. 예를 들어 블로그 서비스에서는 id, title, content와 같은 필드들로 이루어진 post라는 리소스가 존재할 것입니다.

rest api example

REST의 구성요소

  1. 자원(Resource): URI
    • 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다. -자원을 구별하는 ID는 ‘/groups/:group_id’와 같은 HTTP URI 다.
    • Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.
  2. 행위(Verb): HTTP Method
    • HTTP 프로토콜의 Method를 사용한다.
    • HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드를 제공한다.
  3. 표현(Representation of Resource)
    • Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.
    • REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.
    • JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.

REST 6가지 원칙

REST는 다음과 같은 여섯가지 디자인 원칙을 지키는 것을 내용으로 합니다.

  1. Server-Client(서버-클라이언트 구조)
  1. Uniform Interface(인터페이스 일관성)
  1. Stateless(무상태)
  1. Cacheable(캐시 처리 가능)
  1. Layered System(계층화)
  1. Code-On-Demand(optional)

REST API 디자인 가이드(설계 규칙)

REST API 설계의 핵심 내용은 다음 두가지 입니다. 이 두가지는 꼭 기억하도록 합시다.

  1. URI로 통해 자원(Resource)을 명시하고
  2. HTTP Method를 통해 해당 자원에 대한 동작을 명시한다.

핵심 설계 규칙

참고 리소스 원형
도큐먼트 : document는 1개의 개체를 나타내는 것으로 객체 인스턴스, Datbase의 record와 유사한 개념
컬렉션 : 단일 Resource(document)들의 묶음. 새로운 Resource를 추가할 때, 또는 단일 Resource가 아닌 다량의 Resource가 필요할 때 collection Resource를 호출

  1. URI는 정보의 자원을 표현해야 한다.
  1. 자원에 대한 행위는 HTTP Method(GET, PUT/PATCH, POST, DELETE 등)로 표현한다.

이외에 URI 설계 규칙

  1. 슬래시 구분자(/ )는 계층 관계를 나타내는데 사용한다.
  2. URI 마지막 문자로 슬래시(/ )를 포함하지 않는다.
    • URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하기 때문에 혼동을 주지 않도록 URI 경로의 마지막에는 슬래시(/)를 사용하지 않는다.
    • Ex) http://restapi.example.com/houses/apartments/ (X)
  3. 하이픈(- )은 URI 가독성을 높이는데 사용
    • 불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높인다.
  4. 밑줄( _ )은 URI에 사용하지 않는다.
    • 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 가독성을 위해 밑줄은 사용하지 않는다.
  5. URI 경로에는 소문자가 적합하다.
    • URI 경로에 대문자 사용은 피하도록 한다.
  6. 파일확장자는 URI에 포함하지 않는다.
    • 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않고 Accept header를 사용한다.
    • Ex) http://restapi.example.com/members/soccer/345/photo.jpg (X)
    • Ex) GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)
  7. 리소스 간에는 연관 관계가 있는 경우

HTTP 응답 상태 코드 규칙

REST API는 URI 규칙을 지키는 것 뿐만 아니라 리소스에 대한 응답을 잘 내어주는 것까지 포함되어야 합니다. 정확한 응답의 상태코드만으로도 많은 정보를 전달할 수가 있기 때문입니다.(더 자세한 내용은 HTTP 상태코드 관련 글 참고) 상태 코드 의미
200 요청 정상 수행
201 리소스 생성 요청 정상 수행(POST 요청시)
400 부적절한 요청
401 인증되지 않은 클라이언트의 보호된 리소스 요청
405 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우
301 요청한 리소스에 대한 URI가 변경 되었을 때
500 서버에 문제가 있을 경우 사용하는 응답 코드

REST API와 RESTful API

REST API와 RESTful API는 같은 의미입니다. RESTful은 "REST하게 만들어진"이라는 의미를 갖고 있습니다. ‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있으며 REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다.

References

https://www.ibm.com/kr-ko/cloud/learn/rest-apis https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html https://www.redhat.com/ko/topics/api/what-is-a-rest-api https://sanghaklee.tistory.com/57 https://meetup.toast.com/posts/92

jslee7420 commented 3 years ago

Restful API에 대해 설명해 보세요.