REST API

소히·2022년 10월 25일
0
post-thumbnail

Rest API

웹에서 사용되는 데이터나 자원을 HTTP URI로 표현하고, HTTP프로토콜을 통해 요청과 응답을 정의하는 방식

📌REST란?
Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.

  1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
  2. HTTP Method(POST, GET, PUT, DELETE)를 통해
  3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미.
    • CRUD Operation CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인
      Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말로,
      REST에서의 CRUD Operation 동작 예시는 다음과 같다.
      Create : 데이터 생성(POST)
      Read : 데이터 조회(GET)
      Update : 데이터 수정(PUT)
      Delete : 데이터 삭제(DELETE)

REST API 설계 예시

1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.

Bad Example http://khj93.com/Running/
Good Example  http://khj93.com/run/

2. 마지막에 슬래시 (/)를 포함하지 않는다.

Bad Example http://khj93.com/test/  
Good Example  http://khj93.com/test

3. 언더바 대신 하이폰을 사용한다.

Bad Example http://khj93.com/test_blog
Good Example  http://khj93.com/test-blog

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

Bad Example http://khj93.com/photo.jpg 
Good Example  http://khj93.com/photo

5. 행위를 포함하지 않는다.

Bad Example http://khj93.com/delete-post/1  
Good Example  http://khj93.com/post/1

Ricahrdson 성숙도 모델

레벨 0

웹 메커니즘은 전혀 사용하지 않고 단순히 HTTP를 원격 통신을 위한 전송 시스템으로 사용한다. 이 경우에는 REST API라고 할 수 없다.

레벨 1

개별 리소스 와의 통신을 준수해야 함.
모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해야 하며 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다.
엔드포인트 작성 시에는 동사, HTTP 메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고,
리소스에 집중해 명사 형태의 단어로 작성하는 것이 바람직한 방법이다.

요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환해야 한다.

레벨 2

CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점을 둔다.
앞서 0단계와 1단계 예시에서는 모든 요청을 CRUD(Create, Read, Update, Delete)와 상관없이 POST 메서드를 사용하고 있다. 그러나 REST 성숙도 모델 2단계에 따르면, 이는 CRUD에 따른 적합한 메서드를 사용한 것이 아니다.

예약 가능한 시간을 확인한다는 것 → 예약 가능한시간을 조회(READ)하는 행위 → GET 메서드로 요청.
특정 시간에 예약한다는 것 → 특정 시간에 예약을 생성(CREATE)하는 행위 → POST 메서드로 요청.

  • POST POST 요청에 대한 응답은 201 Created 로 작성해야 하며 관련 리소스를 클라이언트가 Location
    헤더에 작성된 URI를 통해 확인할 수 있도록 하면 완벽하게 REST 성숙도 모델의 2단계를 충족한 것이라고 볼 수 있다.
    오류가 발생하면 2xx이 아닌 응답이 있어야 함.

💡 HTTP 메서드를 사용할 때 몇가지 규칙

GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다.

POST 메서드는 요청마다 새로운 리소스를 생성하고 PUT 메서드는 요청마다 같은 리소스를 반환한다. 이렇게 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 한다.
그렇기 때문에 멱등성을 가지는 메서드 PUT과 그렇지 않은 메서드POST는 구분하여 사용해야 한다.

PUT 메서드와 PATCH 메서드도 구분하여 사용해야 한다. PUT은 교체, PATCH는 수정의 용도로 사용.


레벨 3

HATEOAS(Hypertext As The Engine Of Application State) 라는 약어로 표현되는 하이퍼 미디어 컨트롤을 적용한다. 3단계의 요청은 2단계와 동일하지만, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성해야 한다.

각 슬롯에는 약속 예약 방법을 알려주는 URI가 포함 된 링크 요소가 있다.
하이퍼 미디어 컨트롤의 요점은 다음에 할 수 있는 작업과 이를 수행하기 위해 조작해야하는 리소스의 URI를 알려주는 것이다.

API : 특정사이트에서 특정 데이터를 공유 할 경우 어떠한 방식으로 정보를 요청하고 받을 수 있는지에 대한 규격들

Open API

누구나 사용할 수 있도록 공개된 API.
개발 시 들어가는 시간과 비용을 절감 할 수 있고 양질의 앱을 개발할 수 있다!

API Key가 필요하다.

🔍API Key

가장 기초적인 방법으로 서비스 제공자가 발급해준 KEY를 통해 인증을 하는 방식이다.

  • API Key는 특정 사용자만 알 수 있는 일종의 문자열로 되어 있다.
    (예:aASDFasdf87AS5D4F2asddf234SDF234)
  • API Key는 API 서비스 제공자가 제공하고 사용자는 API Key 정보를 메시지 안에 포함하여 호출한다.
  • API Key는 한번 노출되면 전체 API가 뚫리는 문제가 발생할 수 있기 때문에 높은 보안 인증이 필요한 상황에는 적합하지 않는 방법이다.

0개의 댓글