REST API 에 대해서 알아보자! 으쌰!

김지수·2023년 3월 29일
1
post-thumbnail

중요 키워드

  • REST API
  • REST 성숙도 모델
  • Open API
  • API Key

REST API 란?

REST는 Representational State Transfer라는 용어의 약자로서 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다.

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

개별적으로 주소 지정이 가능한 리소스(API의 명사)의 컬렉션으로 모델링됩니다.
리소스는 리소스 이름으로 참조되며 적은 수의 메서드 집합(동사 또는 작업으로도 알려짐)을 통해 조작됩니다.

REST API 디자인 방법

로이필딩이 논문에서 제시간 REST방법론 보다 레오나르드 리차드슨은 더 실용적이게 REST API 4단계 모델을 만들었습니다

REST 성숙도 모델은 총 4단계로 나워져 있습니다 (0~3단계)
로이필딩은 모든 단계를 충족해야 REST API라고 하였지만 2단계 까지만 적용해도
훌륭한 REST API 라고 할 수 있습니다!

REST 성숙도 모델 0단계

0단계는 단순하게 HTTP 프로토콜을 사용하기만 하면 되며, REST API 기본단계 입니다

URI로 하나의 End-point를 사용하고 해당 End-point로 요청 정보를 포함한 문서(body)를 보내야 하기 때문에 POST로 요청한다.

예를들어 허준이라는 이름의 주치의의 예약 가능한 시간을 확인하고, 어떤 특정 시간에 예약하는 상황이 있습니다

post로 병원에 방문 할 날짜와 주치의 이름으로 예약을 요청 했으며,
200 ok로 답변을 받았다

REST 성숙도 모델 1단계

LEVEL 1에서는 모든 요청을 단일 End-point(이하 엔드포인트)로 보내는 것이 아니라 개별 리소스와 통신한다.
앞서 말했듯이 자원은 개별 리소스에 맞는 엔드포인트(End-point)를 사용해야하며, 요청하고 받는 자원에 대한 정보를 응답으로 해야한다가 1단계의 핵심입니다!

0단계에선 End-point를 모두 / appointment를 사용했다면, 1단계에서는 리소스가 무엇이냐에 따라 각기 다른 엔드포인트로 구분해야합니다

LEVEL 0과 마찬가지로 병원 예약을 하는 시나리오를 생각해보자. 나의 주치의분의 성함은 "허준"이다.

예약 가능한 시간 확인을 위해 POST로 요청해보자.

예시와 같이 어떤 리소스를 변화시키는지 혹은 어떤 응답이 제공되는지에 따라 각기 다른 엔드포인트를 사용하기 때문에 적절한 엔드포인트를 작성하는 것이 중요하다. 엔드포인트 작성시에는 동사, HTTP 메서드 혹은 어떤 행위에 대한 단어 사용은 지양하고 리소스를 표현하는데 집중해 명사 형태의 단어로 리소스를 식별할 수 있는 형태로 작성하는 것이 바람직한 방법이다.

REST 성숙도 모델 2단계

2단계 에서는 CRUD에 맞게 적절한 HTTP메서드를 사용하는것에 중점을 두어야 합니다

  • Create

  • Read

  • Update

  • Delete

    예를 보았을때 예약가능한 시간을 확인 하는것은 조회(Read)를 하는 행위이고, 특정 시간에 예약한다는 것은 해당 특정 시간에 예약을 생성 (Create) 한다는것과 같습니다 조회하기 위해선 GET메서드를 사용하여 요청을 보내야 합니다

    또한 생성 (Create) 을 하기 위해서는 POST 메서드를 사용하여 요청을 보내야 하며, 응답이 어떻게 반환되는지가 중요합니다

☠️ HTTP 메서드를 사용할 때 유의해야 할 규칙❗️

  • GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용해야 합니다.
  • POST 메서드는 요청마다 새로운 리소스를 생성하고 PUT 메서드는 요청마다 같은 리소스를 반환합니다.
    이렇게 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 합니다. 그렇기 때문에 멱등성을 가지는 메서드 PUT과 그렇지 않은 메서드POST는 구분하여 사용해야 합니다.
  • PUT 메서드와 PATCH 메서드도 구분하여 사용해야 합니다. PUT은 교체, PATCH는 수정의 용도로 사용합니다.

REST 성숙도 모델 3단계

HATEOAS(Hypermedia As The Engine Of Application State)라는 하이퍼미디어 컨트롤을 적용합니다!

요청은 2단계와 같지만, 응답에는 이소스의 URI를 포함한 링크 요소를 삽입하여 작성해야 합니다

예를 들어 아래와 같이 허준이라는 의사의 예약 가능 시간을 확인한 후에는 그 시간대에 예약을 할 수 있는 링크를 삽입하거나, 특정 시간에 예약을 완료하고 나서는 그 예약을 다시 확인할 수 있도록 링크를 작성해 넣을 수도 있습니다. 이렇게 응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 핵심 포인트입니다


Open API

공공데이터에 쉽게 접근 할 수 있도록 Open API형태로 공공데이터에 제공한다.
Open API는 누구에게나 열려있는 API지만 무제한으로 이용이 가능한 것은 아닙니다
API 마다 정해진 이용 규칙이 있고, 그 이용 규칙에 따라 제한사항이 있을 수도 있습니다

Open API는 사용자들이 자원에 대한 전문적인 지식이 없어도 쉽게 사용 할 수 있도록 기능을 추상화
하여 표준화한 인터페이스입니다

이러한 Open API 서비스는 아마존, 구글 등 글로벌 회사들이 자사의 서비스를 일반 개발자, 타사 등에 개방하여 다양한 Mashup 서비스가 생겨나게 하고, 이렇게 하는 것이 자사의 비즈니스를 더욱 확대하고 수익을 창출하게 되는 계기가 되는 것이 입증되었기에, 국내에서도 공공기관과 포털 사이트를 중심으로 Open API를 이용하여 자사의 자원을 개방하는 서비스가 보편화되고 있는 추세입니다.

API Key

API를 이용하기 위해선 API Key가 필요합니다
API Key는 서버의 문을 여는 열쇠입니다

API 키는 다음을 제공합니다.

프로젝트 식별 — API를 호출하는 애플리케이션이나 프로젝트를 식별합니다.

프로젝트 승인 — 호출하는 애플리케이션에 API를 호출하는 액세스 권한이 부여되었고 프로젝트에서 API가 사용 설정되었는지 여부를 확인합니다.

profile
코린이

1개의 댓글

comment-user-thumbnail
2023년 3월 29일

지수님 너무 깔끔히 정리하신 것 같아요. 좋은 글 잘 읽고갑니다!

답글 달기