Restful API

이준영·2023년 1월 30일
0

REST란

Representational State Transfer 의 약자이다.
어떤 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행하기 위해 URI(Resource)로 GET, POST 등의 방식(Method)을 사용하여 요청을 보낸다.
즉 자원을 URI 로 표시하고 해당 자원의 상태를 주고 받는 것을 의미한다.

URI 와 URL의 차이점
URLUniform Resource Locator로 인터넷 상 자원의 위치를 의미한다.
반면 URIUniform Resource Identifier로 인터넷 상의 자원을 식별하기 위한 문자열의 구성이다.
URI가 URL을 포함하는 관계인 것이다.

Rest의 구성요소

  • 자원(Resource) - URI
    • 모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
    • Client는 URI를 이용해 자원을 지정하고
    해당 자원의 상태(정보)에 대한 조작을 Server에 요청
    • 자원을 구별하는 ID는 /users/:id와 같은 HTTP URI
  • 행위(Verb) - Method
    • HTTP 프로토콜의 Method를 사용한다.
    • HTTP 프로토콜은 GET, POST, PUT, PATCH, DELETE의 Method를 제공한다. ( CRUD )
  • 표현 ( Representation of Resource )
    • Client와 Server가 데이터를 주고 받을 때는 주로 JSON, XML을 이용한다.

PUT과 PATCH
PUT 메서드 사용시 전체가 아닌 일부만 전달할 경우, 전달한 필드 외 모두 null or 초기값 처리되니 주의
PUT은 항상 멱등성을 만족하지만
PATCH는 구현에 따라 만족 여부가 달라진다.

멱등성 : 멱등이란 한 번을 호출하든 여러 번을 호출하든 그 결과가 같음을 의미한다.

Rest의 특징

1. Uniform (유니폼 인터페이스)
URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
안드로이드 플랫폼, IOS 플랫폼 등 특정 언어나 플랫폼에 종속되지 않고 사용이 가능하다.

2. Stateless (무상태성)
작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
그래서 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.

3. Cacheable (캐시 기능)
HTTP에서 캐싱 기능을 사용할 수 있다.

4. Self-descriptiveness(자체 표현 구조)
REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다.

5. Client-Server 구조
Rest 서버는 API 제공을 하고 클라이언트는 사용자 인증에 관련된 일들을 직접 관리한다.
자원이 필요한 Client는 자원이 있는 Server에 요청하는데, 서로간의 의존성이 줄어들고 역할이 구분되기 때문에 개발내용이 명확해짐

6. 계층형 구조
클라이언트는 Rest API 서버만 호출한다.
REST 서버는 다중 계층으로 구성될 수 있으면 로드 밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 둘 수 있다.

Rest API란

REST 기반의 규칙들을 지켜서 설계된 API 이다.

Rest 기반 규칙들

  • URI는 자원을 표현하는데 중점을 두어야 한다.
    // URI에 delete, create, show등을 포함하지 말 것
    나쁜 예시 : POST api/search/users
    좋은 예시 : POST api/users

  • 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.
    URI에 자원의 행위에 대한 표현이 들어가지 않는 대신 HTTP Method를 통해 대신한다.

  • 슬래시(/) 는 계층관계를 나타내는데 사용한다.

  • URI 마지막은 슬래시(/)를 사용하면 안 된다.

  • 하이픈(-) 은 URI 가독성을 높이는데 사용한다.

  • 언더바(_) 는 URI에 사용하지 않는다.
    가려지거나 구분하기 어렵기 때문에 대신 하이픈(-) 을 사용

  • URI 는 소문자를 사용한다.
    대소문자에 따라 다른 리소스로 인식하기 때문에

  • 파일 확장자(.png, .pdf...)는 URI 에 포함하지 않는다.

Restful API란

REST의 규칙들을 잘 반영한 API를 말한다.
개발자들이 비공식적으로 제시한 것이라 명확한 정의는 없지만
RESTFUL의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이다.
이렇게 RESTful하게 만든 API는 요청을 보내는 주소만으로도 어떤 것을 요청 하는지 파악이 가능하다.

Restful하지 못한 경우

  • CRUD 기능을 전부 POST METHOD로만 처리하는 API
  • URI에 자원과 id외 정보가 들어가는 경우

// 만약 성능을 중요시 한다면 굳이 Restful한 API로 구현할 필요는 없다.

0개의 댓글