네트워크 - HTTP

랑아·2023년 3월 21일

네트워크

목록 보기
5/5
post-thumbnail

HTTP

REST API

웹 애플리케이션에서는 HTTP 메서드를 이용해 서버와 통신한다. GET을 통해 웹 페이지나 데이터를 요청하고, POST로 새로운 글이나 데이터를 전송하거나 DELETE로 저장된 글이나 데이터를 삭제할 수 있다. 이처럼 클라이언트와 서버가 HTTP 통신을 할 때는 어떤 요청을 보내고 받느냐에 따라 메서드의 사용이 달라진다.

이런 사용은 아무런 규칙 없이 이루어지는 것이 아니다. 요청과 응답을 할 때, 일종의 규약이 존재한다.

REST API에서 REST는 "Representational State Transfer"의 약자로, 로이 필딩의 박사학위 논문에서 웹(http)의 장점을 최대한 활용할 수 있는 아키텍처로써 처음 소개되었다. REST API는 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 말한다.

REST API

좋은 REST API를 디자인하는 방법

REST API를 작성할 떄는 몇 가지 지켜야 할 큐칙들이 있따. 로이 필딩이 논문으로 제시한 REST 방법론을 보다 더 실용적으로 적용하기 위해 레오나르도 리차드슨은 REST API를 잘 적용하기 위한 4단계 모델을 만들었다.

리차드슨의 REST 성숙도 모델을 구조화하면 다음과 같다.

  • REST 성숙도 모델 - 0단계
    - 단순히 HTTP 프로토콜을 사용하는 것
    - 해당 API를 REST API라고 할 수 없으며, 좋은 REST API를 작성하기 위한 기본 단계

  • REST 성숙도 모델 - 1단계
    - 개별 리소스와의 통신을 준수
    - 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야 하며, 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다는 것
    - 엔드포인트는 명사로 작성
    - 엔드포인트 작성법
    CamelCase : 단어를 붙여쓰며, 각 단어의 첫 글자를 대문자로 작성(첫 단어의 첫 글자는 대소문자 상관 없음
    SnakeCase : 언더바()로 각 단어를 이어서 작성
    Spinal-Case : 하이픈(-)으로 각 단어를 이어서 작성
    - 응답 시 사용한 리소스의 정보와 시소스 사용에 대한 성공/실패 여부를 반환해야 함

  • REST 성숙도 모델 - 2단계
    - CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것
    - CRUD : 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(일기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말
    - REST 성숙도 모델 2단계까지 적용하면 대체적으로 잘 작성된 API라고 여김

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

Open API와 API Key

Open API

정부에서 제공하는 공공데이터가 있다. 공공데이터에 쉽게 접근할 수 있도록 정부는 Open API의 형태로 공공데이터를 제공하고 있다.

이 APIDPSMS 'Open"이라는 키워드가 붙어 있다. 누구에게나 열려있는 API로 기관이나 API마다 정해진 이용 수칙이 있고, 그 이용 수칙에 따라 제한사항(가격, 정보의 제한 등)이 있을 수 있다.

API Key

API를 이용하기 위해서는 API Key가 필요하다. API Key는 서버의 문을 여는 열쇠라고 생각할 수 있다. 클라이언트의 요청에 따라 서버에서 응답한다는 말은 결국 서버를 운용하는 데에 비용이 발생한다는 뜻이다. 따라서, 서버 입장에서 아무런 조건 없이 익명의 클라이언트에게 데이터를 제공할 의무도, 이유도 없다.

그래서 로그인된 이용자에게만 자원에 접근할 수 있는 권한을 API Key의 형태로 제공하고, 데이터를 요청할 때 API Key를 같이 전달해야만 원하는 응답을 받을 수 있다.

0개의 댓글