programmingu

RESTFul API 란? 본문

Computer Science/웹

RESTFul API 란?

예진잉구 2022. 1. 11. 00:19

REST


REST의 개념

  • Representation State Transfer의 약자로 소프트웨어 프로그램 아키텍쳐의 한 형식
  • 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것.
  • 웹의 모든 자원에 고유한 ID인 HTTP URI를 부여
  • REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
  • 플랫폼에 맞추어 새로운 서버를 만들 필요 없도록 범용적 사용성을 보장하는 서버 디자인 ⇒ HTTP 표준 규약을 지키면서 API를 만드는 것이다
1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
2. HTTP Method(POST, GET, PUT, DELETE)를 통해
3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다.
  • URI vs URL
    • URI는 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미한다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다.
    • URL은 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다
    • URL은 URI의 서브셋. URI는 식별하고, URL은 위치를 가르킨다.

 

 

REST의 구성


  1. 자원(Resource) : HTTP URI
  2. 자원에 대한 행위(Verb) : HTTP Method
  3. 자원에 대한 행위의 내용(Representations) :HTTP Message Pay Load
  • Resource
    • http://myweb/users와 같은 URI
    • 모든 것을 Resource (명사)로 표현하고, 세부 Resource에는 id를 붙임
  • Method                                                               Method 의미                           Idempotent
    POST Create
    GET Select
    PUT Update
    DELETE Delete
    • Idempotent : 한 번 수행하냐, 여러 번 수행했을 때 결과가 같나?
  • Message
    • 메시지 포맷이 존재
      HTTP POST, <http://myweb/users/>
      {
      	"users" : {
      		"name" : "terry"
      	}
      }
      
    • : JSON, XML 과 같은 형태가 있음 (최근에는 JSON 을 씀)

 

 

REST 특징


  1. 클라이언트 / 서버 구조
    • 클라이언트는 유저와 관련된 처리를, 서버는 REST API를 제공함으로써 각각의 역할이 확실하게 구분되고 일괄적인 인터페이스로 분리되어 작동할 수 있게 한다
    • REST Server: API를 제공하고 비지니스 로직 처리 및 저장을 책임진다.
    • Client: 사용자 인증이나 context (세션, 로그인 정보) 등을 직접 관리하고 책임진다.
    • 서로 간 의존성이 줄어든다.
  2. 무상태성 (Stateless)
    • REST는 HTTP의 특성을 이용하기 때문에 무상태성을 갖는다.
    • 즉 서버에서 어떤 작업을 하기 위해 상태정보를 기억할 필요가 없고 들어온 요청에 대해 처리만 해주면 되기 때문에 구현이 쉽고 단순해진다.
  3. 캐시 처리 가능 (Cacheable)
    • HTTP라는 기존 웹표준을 사용하는 REST의 특징 덕분에 기본 웹에서 사용하는 인프라를 그대로 사용 가능하다.
    • 대량의 요청을 효율적으로 처리하기 위해 캐시가 요구된다.
    • 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상 시킬 수 있다.
  4. 자체 표현 구조 (Self - descriptiveness)
    • JSON을 이용한 메시지 포멧을 이용하여 직관적으로 이해할 수 있고 REST API 메시지만으로 그 요청이 어떤 행위를 하는지 알 수 있다.
  5. 계층화 (Layered System)
    • 클라이언트와 서버가 분리되어 있기 때문에 중간에 프록시 서버, 암호화 계층 등 중간매체를 사용할 수 있어 자유도가 높다
  6. 유니폼 인터페이스 (Uniform)
    • Uniform Interface는 Http 표준에만 따른다면 모든 플랫폼에서 사용이 가능하며, URI로 지정한 리소스에 대한 조작을 가능하게 하는 아키텍쳐 스타일을 말한다
    • URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
    • 즉, 특정 언어나 기술에 종속되지 않는다.

 

 

REST의 장단점


장점

  • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
  • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
  • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
  • 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
  • 서버와 클라이언트의 역할을 명확하게 분리한다.

단점

  • REST는 point-to-point 통신모델을 기본으로 한다. 따라서 서버와 클라이언트가 연결을 맺고 상호작용해야하는 어플리케이션의 개발에는 적당하지 않다.
  • REST는 URI, HTTP 이용한 아키텍처링 방법에 대한 내용만을 담고 있다. 보안과 통신규약 정책 같은 것은 전혀다루지 않는다. 따라서 개발자는 통신과 정책에 대한 설계와 구현을 도맡아서 진행해야 한다.
  • HTTP Method 형태가 제한적이다. 사용할 수 있는 메소드가 4가지밖에 없다.
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
  • 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(익스플로어)

 

REST API


  • REST의 원리를 따르는 API
  • REST API를 올바르게 설계하기 위한 몇가지 규칙을 알아보자

중심 규칙

  • REST에서 가장 중요하며 기본적인 규칙은 아래 두 가지
  1. URI는 정보의 자원을 표현해야 한다
  2. 자원에 대한 행위는 HTTP Method (GET, POST, PUT, DELETE 등)으로 표현한다 ⇒ URI에 행위를 포함하지 않아야 함

세부 규칙

  1. 슬래시 구분자 ( / )는 계층 관계를 나타내는데 사용한다.
  2. URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.
    • 즉 URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다르다는 것
    • 역으로 리소스가 다르면 URI도 달라져야 한다.
  3. 하이픈 ( - )은 URI 가독성을 높이는데 사용한다.
  4. 밑줄 ( _ )은 URI에 사용하지 않는다.
  5. URI 경로에는 소문자가 적합하다.
    • URI 경로에 대문자 사용은 피하도록 한다.
  6. 파일확장자는 URI에 포함하지 않는다.
    • REST API 에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다.
    • 대신 Accept Header 를 사용한다.
    • ex) GET: http://restapi.exam.com/orders/2/Accept: image/jpg
  7. 리소스 간에 연관 관계가 있는 경우
    • /리소스명/리소스ID/관계가 있는 다른 리소스 명
    • ex) GET: /users/2/orders (일반적으로 소유의 관계를 표현할 때 사용

REST API 설계 예시

 

 

RESTful


RESTful이란

  • RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
  • ‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있다.
    • RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다.
    • 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다.

RESTful의 목적

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

RESTful 하지 못한 경우

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

    REST


    REST의 개념
    • Representation State Transfer의 약자로 소프트웨어 프로그램 아키텍쳐의 한 형식
    • 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것.
    • 웹의 모든 자원에 고유한 ID인 HTTP URI를 부여
    • REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
    • 플랫폼에 맞추어 새로운 서버를 만들 필요 없도록 범용적 사용성을 보장하는 서버 디자인 ⇒ HTTP 표준 규약을 지키면서 API를 만드는 것이다.
    <aside> ✔️
    1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
    2. **HTTP Method(POST, GET, PUT, DELETE)**를 통해
    3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다. </aside>
    • URI vs URLURL은 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다.
    • URL은 URI의 서브셋. URI는 식별하고, URL은 위치를 가르킨다.
    • URI는 특정 리소스를 식별하는 **통합 자원 식별자(Uniform Resource Identifier)**를 의미한다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다.
    REST의 구성
    1. 자원(Resource) : HTTP URI
    2. 자원에 대한 행위(Verb) : HTTP Method
    3. 자원에 대한 행위의 내용(Representations) :HTTP Message Pay Load
    • Resource
      • http://myweb/users와 같은 URI
      • 모든 것을 Resource (명사)로 표현하고, 세부 Resource에는 id를 붙임
    • MethodMethod 의미 Idempotent
      POST Create
      GET Select
      PUT Update
      DELETE Delete
      • Idempotent : 한 번 수행하냐, 여러 번 수행했을 때 결과가 같나?
    • Message
      • 메시지 포맷이 존재
        HTTP POST, <http://myweb/users/>
        {
        	"users" : {
        		"name" : "terry"
        	}
        }
        
      • : JSON, XML 과 같은 형태가 있음 (최근에는 JSON 을 씀)
    REST 특징
    1. 클라이언트 / 서버 구조
      • 클라이언트는 유저와 관련된 처리를, 서버는 REST API를 제공함으로써 각각의 역할이 확실하게 구분되고 일괄적인 인터페이스로 분리되어 작동할 수 있게 한다
      • REST Server: API를 제공하고 비지니스 로직 처리 및 저장을 책임진다.
      • Client: 사용자 인증이나 context (세션, 로그인 정보) 등을 직접 관리하고 책임진다.
      • 서로 간 의존성이 줄어든다.
    2. 무상태성 (Stateless)
      • REST는 HTTP의 특성을 이용하기 때문에 무상태성을 갖는다.
      • 즉 서버에서 어떤 작업을 하기 위해 상태정보를 기억할 필요가 없고 들어온 요청에 대해 처리만 해주면 되기 때문에 구현이 쉽고 단순해진다.
    3. 캐시 처리 가능 (Cacheable)
      • HTTP라는 기존 웹표준을 사용하는 REST의 특징 덕분에 기본 웹에서 사용하는 인프라를 그대로 사용 가능하다.
      • 대량의 요청을 효율적으로 처리하기 위해 캐시가 요구된다.
      • 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상 시킬 수 있다.
    4. 자체 표현 구조 (Self - descriptiveness)
      • JSON을 이용한 메시지 포멧을 이용하여 직관적으로 이해할 수 있고 REST API 메시지만으로 그 요청이 어떤 행위를 하는지 알 수 있다.
    5. 계층화 (Layered System)
      • 클라이언트와 서버가 분리되어 있기 때문에 중간에 프록시 서버, 암호화 계층 등 중간매체를 사용할 수 있어 자유도가 높다
    6. 유니폼 인터페이스 (Uniform)
      • Uniform Interface는 Http 표준에만 따른다면 모든 플랫폼에서 사용이 가능하며, URI로 지정한 리소스에 대한 조작을 가능하게 하는 아키텍쳐 스타일을 말한다
      • URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
      • 즉, 특정 언어나 기술에 종속되지 않는다.
    REST의 장단점
    장점
    • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
    • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
    • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
    • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
    • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
    • 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
    • 서버와 클라이언트의 역할을 명확하게 분리한다.
    단점
    • REST는 point-to-point 통신모델을 기본으로 한다. 따라서 서버와 클라이언트가 연결을 맺고 상호작용해야하는 어플리케이션의 개발에는 적당하지 않다.
    • REST는 URI, HTTP 이용한 아키텍처링 방법에 대한 내용만을 담고 있다. 보안과 통신규약 정책 같은 것은 전혀다루지 않는다. 따라서 개발자는 통신과 정책에 대한 설계와 구현을 도맡아서 진행해야 한다.
    • HTTP Method 형태가 제한적이다. 사용할 수 있는 메소드가 4가지밖에 없다.
    • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
    • 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(익스플로어)

    REST API


    • REST의 원리를 따르는 API
    • REST API를 올바르게 설계하기 위한 몇가지 규칙을 알아보자
    중심 규칙
    • REST에서 가장 중요하며 기본적인 규칙은 아래 두 가지
    1. URI는 정보의 자원을 표현해야 한다
    2. 자원에 대한 행위는 HTTP Method (GET, POST, PUT, DELETE 등)으로 표현한다 ⇒ URI에 행위를 포함하지 않아야 함
    세부 규칙
    1. 슬래시 구분자 ( / )는 계층 관계를 나타내는데 사용한다.
    2. URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.
      • 즉 URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다르다는 것
      • 역으로 리소스가 다르면 URI도 달라져야 한다.
    3. 하이픈 ( - )은 URI 가독성을 높이는데 사용한다.
    4. 밑줄 ( _ )은 URI에 사용하지 않는다.
    5. URI 경로에는 소문자가 적합하다.
      • URI 경로에 대문자 사용은 피하도록 한다.
    6. 파일확장자는 URI에 포함하지 않는다.
      • REST API 에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다.
      • 대신 Accept Header 를 사용한다.
      • ex) GET: http://restapi.exam.com/orders/2/Accept: image/jpg
    7. 리소스 간에 연관 관계가 있는 경우
      • /리소스명/리소스ID/관계가 있는 다른 리소스 명
      • ex) GET: /users/2/orders (일반적으로 소유의 관계를 표현할 때 사용
    REST API 설계 예시

    RESTful


    RESTful이란
    • RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
    • ‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있다.
      • RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다.
      • 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다.
    RESTful의 목적
    • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
    • RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.
    RESTful 하지 못한 경우
    • Ex1) CRUD 기능을 모두 POST로만 처리하는 API
    • Ex2) route에 resource, id 외의 정보가 들어가는 경우(/students/updateName)

 

 

 

 

참고자료

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80

 

[네트워크] REST API란? REST, RESTful이란?

REST API란 REST를 기반으로 만들어진 API를 의미합니다. REST API를 알기 위해 REST부터 알아보도록 하겠습니다. REST란? REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원..

khj93.tistory.com

https://velog.io/@somday/RESTful-API-%EC%9D%B4%EB%9E%80

 

RESTful API 이란

REST API 에서 REST는 Representational State Transfer 의 약자로 소프트웨어 프로그램 아키텍처의 한 형식 입니다.즉, 자원을 이름 (자원의 표현) 으로 구분하여 해당 자원의 상태 (정보)를 주고 받는 모든

velog.io