REST & REST API & RESTful

newVelog·2024년 4월 24일
0

CS

목록 보기
20/31

이전에 "REST API 란?"이라는 제목으로 게시글을 작성한 적이 있다.
실제 이 게시글을 작성한 시점에는 해당 주제에 대해서 개발을 해보지 않고 이론적인 내용만 정리해 내용이 머리에 들어오지 않았던 것 같다.
그래서 이번 게시글에서 내가 이해한 내용을 3가지로 나누어 다시 정리해 보려 한다.

REST

REST(REpresentational State Transfer)

자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미
즉, 자원(resource)표현(representation)에 의한 상태 전달을 뜻한다.

HTTP URI를 통해 자원(Resource)를 명시하고, HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.

REST 가 필요한 이유

서버 프로그램은 다양한 브라우저와 다양한 모바일 디바이스에서도 통신이 되어야한다.
따라서 멀티 플랫폼에 대한 지원을 위해 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색한 것이 REST인 것이다.

REST API

REST API는 REST 기반으로 서비스 API를 구현한 것이다.

OpenAPI, MSA를 제공하는 서비스는 대부분 REST API를 제공한다.

REST API 설계 기본 규칙

REST API는 다음과 같은 규칙을 지킨다면 각 요청이 어떤 동작이나 정보를 위한 것인지 그 요청의 모습 자체로 추론이 가능하다는 특징이 있다.

  • URI는 정보의 자원을 표현해야 한다.
  • 자원에 대한 행위는 HTTP Method로 표현한다.
    행위는 URI에 포함하지 않는다.
  1. 슬래시( / )로 계층 관계를 표현한다.
  2. URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.
  3. 밑줄( _ )을 사용하지 않고, 하이픈( - )을 사용한다.
  4. URI는 소문자로만 구성한다.
  5. 파일확장자는 URI에 포함하지 않는다.
    Ex) test.com/restapi/220/photo.jpg (X)
  6. 리소스 간에는 연관 관계가 있는 경우
    /리소스명/리소스 ID/관계가 있는 다른 리소스명
    Ex) GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
  7. HTTP 응답 상태 코드 사용
    1xx : 전송 프로토콜 수준의 정보 교환
    2xx : 클라어인트 요청이 성공적으로 수행됨
    3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함
    4xx : 클라이언트의 잘못된 요청
    5xx : 서버쪽 오류로 인한 상태코드

REST API 설계 예시

RESTful

RESTful은 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
REST API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다.

RESTful의 목적

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
  • RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.

RESTful 하지 못한 경우

  • Ex1) CRUD 기능을 모두 POST로만 처리하는 API
  • Ex2) route에 resource, id 외의 정보가 들어가는 경우(/students/updateName)

정리

  • REST : 자원의 표현에 의한 상태 전달의 뜻을 가진 아키텍처
  • REST API : REST 아키텍처 기반의 API
  • RESTful : REST API를 제공하는 서비스를 부르는 용어

출처 : https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://dev-coco.tistory.com/97

0개의 댓글