기계-기계가 웹을 통해 정해진 규약인 http를 이용해 통신하는 규칙

 

 

API, Application Programming Interface

응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스.

API를 사용하면 내부 구현 로직을 알지 못해도 정의되어 있는 기능을 쉽게 사용할 수 있다.

 

여기서 인터페이스란 어떤 장치간에 정보를 교환하기 위한 수단이나 방법을 의미한다.

쉽게 말해 컴퓨터의 기능을 실행시키는 방법이 API.

 

REST, Representational State Transfer

자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것을 의미. (파일, 데이터 등을 자원이라 표현한다.)

서버와 클라이언트의 통신 방식 중 하나로,

HTTP URI를 통해 자원을 명시하고,

HTTP Method를 통해 자원을 교환한다. (CRUD - Get, Put, Post, Delete)

자원을 교환하기 위해 보낸 이 요청들의 결과는 HTTP 상태 코드로 알 수 있다. (200, 404, 500...)

 

 

REST의 규칙

Server-Client 구조 Data, 자원을 가진 쪽이 Server, 요청하는 쪽이 Client
클라이언트와 서버는 독립되어 있다. -> 자원을 공유하는 교집합 존재가 없어야 한다.
Stateless 클라이언트의 정보가 서버에 저장되지 않는다.
서버는 각각의 요청을 완전한 별개의 것으로 인식하고 처리한다.
Cacheable HTTP 프로토콜을 그대로 사용하기 때문에,
HTTP의 특징인 캐싱 기능을 적용하여 대량의 요청을 효율적으로 처리.
계층화
(Layered System)
클라이언트는 서버의 구성과 상관없이 REST API 서버로 요청.
서버는 다중 계층으로 구성될 수도 있음 (로드 밸런싱, 보안 요소, 캐시 등)
Code on Demand
요청을 받으면 서버에서 클라이언트로 코드 또는 스크립트(로직)을 전달,
클라이언트 기능을 확장시킨다
인터페이스 일관성
(Uniform Interface)
정보가 표준 형식으로 전송되기 위해 구성 요소 간 통합 인터페이스를 제공.
HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능하도록 설계

 

그렇기 때문에 REST는 다음과 같은 장점이 있다.

  • HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 호환
  • 서버 - 클라이언트의 역할을 명확하게 분리
  • 여러 서비스 설계에서 생길 수 있는 문제를 최소화

 

REST API

이러한 REST의 아키텍쳐의 조건을 준수하는 어플리케이션 프로그래밍 인터페이스를 의미한다.

최근 많은 API가 REST 형식을 따른 API로 제공되고,

이런 웹 서비스를 RESTful 하다고 표현한다.

 

시스템을 분산하여 확장성과 재사용성을 높인다. (Layered System)

HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할 수도 있다.

 

 

REST API 설계 규칙

1. 웹 기반의 REST API 설계 시, URI를 통해 자원을 표현한다

       URI : https://kiwikiwisae.tistory.com/java/728  

       Resource : java

       Resource id : 728

2. 자원에 대한 조작은 HTTP 메소드 (CRUD) 를 통해 표현한다

     - URI에 행위가 들어가지 않고, Header를 통해 CRUD를 표현하여 동작을 요청한다.

3. 메시지를 통해 리소스를 조작한다

     - Header를 통해 content-type을 지정하여 데이터를 전달 (html, xml, json, text 등)

4. URI에는 소문자만 사용한다.

5. Resource의 이름이나 URI가 길어질 경우 하이픈 - 을 통해 가독성을 높인다. (언더바 _ 는 사용하지 않는다.)

6. 파일 확장자를 표시하지 않는다.

 

 

(Resource : URI (Uniform Resource Identifier), 인터넷 자원을 나타내는 고유한 주소. xml, html, json)

 

 

출처 :

https://youtu.be/lceS3HbGXt4

https://youtu.be/PmY3dWcCxXI

https://inf.run/huPx

+ Recent posts