백엔드/네트워크

[HTTP]REST API

삼삼고 2022. 10. 6. 19:07

❓REST란?

  • REST Representational State Transfer의 약자로서 자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것을 의미한다.
  • 서버와 클라이언트의 통신 방법 중 하나임

 

⚡REST특징

📌인터페이스 일관성(UNIFORM)

  • 정보가 표준 형식으로 전송되기 위해 구성 요소 간 총함 인터페이스 제공
  • HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능하게끔 설계

📌무상 태성(STATELESS)

  • 요청 간에 클라이언트 정보가 서버에 저장되지 않음
  • 서버의 각각의 요청을 완전히 별개의 것으로 인식하고 처리

📌캐시 가능(CACHEABLE)

  • HTTPV프로토콜을 그대로 사용하기 때문에 HTTP의 특징인 캐싱 기능을 적용
  • 대량의 요청을 효율적으로 처리하기 위해 사용

📌자체 표현 구조(SELF-DESCRIPTIVENESS)

  • REST API는 자체가 굉장히 쉽기 때문에 API 메시지만 보고도 API를 이해할 수 있는 구조를 가지고 있음
  • 메시지들이 직관적으로 이해가 가능한 구조이다.

📌CLIENT-SEVER구조

  • 자원이 있는 쪽이 SEVER, 요청하는 쪽이 CLIENT 클라이언트와 서버가 독립적으로 분리되어 있어야 함

📌계층화(Layered System)

  • 클라이언트는 서버의 구성과 상관없이 REST API 서버로 요청
  • 서버는 다중 계층으로 구성될 수 있음

 

❓REST API란?

rest(Representational State Transfer)와 api(Application Programming Interface)의 합성어이다.
HTTP의 주요 저자 중 한 사람인 로이 필딩은 웹(HTTP) 설계의 우수성에 비해 제대로 사용되지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로 REST를 발표하게 되었다.

 

  • HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 호환 가능
  • 서버와 클라이언트의 역할을 명확하게 분리
  • 일반적으로 REST아키텍처를 주현하는 웹 서비스를 RESTful 하다고 표현한다.

 

⚡ RES API특징

  • REST 기반으로 시스템을 분산하여 확 상성과 재사용성을 높임
  • HTPP표준을 따르고 있어 여러 프로그래밍 언어로 구현 가능
  • 웹에서 사용되는 데이터나 자원을 HTTP URL로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

 

📊REST API 성숙도 모델

엄밀하게 3단계까지 지키기는 어렵기 때문에 2단계까지만 적용해도 좋은 디자인이라고 할 수 있다.

 

🔨REST 성숙도 모델 - 0단계

  • 단순히 HTTP 프로토콜을 사용하기만 해도 가능
  • REST API를 작성하기 위한 기본 단계

Request

POST /api/student
{
  "function": "getStudent",
  "arguments" [
    "1"
  ]
}

Response

HTTP/1.1 200 OK
{
  "result" {
    "id": "1"
    "name": "sangbin",
  }
}

CRUD

CREATE : POST /api/student
READ :   POST /api/student
UPDATE : POST /api/student
DELETE : POST /api/student

 

🪓REST 성숙도 모델  - 1단계

  • 요청받은 자원에 대한 정보를 응답으로 전달하는 것이 핵심이다.
  • 모든 자원을 개별 리소스와 맞는 ENDPOINT를 사용해야 한다.
  • 리소스에 대한 정보와 리소스 사용에 대한 성공/실패 여부를 반환해야 한다.

Request

POST /api/student/create
{
  "name': "sangbin"
}

Response

HTTP/1.1 200 OK
{
  "result" : "이미 있습니다."
}

CRUD

CREATE : POST /api/student/create
READ :   POST /api/student/1
UPDATE : POST /api/student/update
DELETE : POST /api/student/remove/1

 

⛏REST 성숙도 모델  - 2단계

  • CRUD에 맞게 적절한 HTTP메서드를 사용하는 것이다.
  • 2단계까지 정용한 하면 대체적으로 잘 작성된 API임
[메서드 사용 규칙]
➡GET : 서버의 데이터를 변화시키지 않는 요청에 사용
➡POST : 요청마다 같은 리소스를 생성
➡PUT : 요청마다 같은 리소스를 반환, 교제의 역할
➡PATCH :  수정의 용도

Request

PUT /api/student/create
{
  "name': "sangbin"
}

Response

HTTP/1.1 201 Created
Content-Type: application/json
{
  "result" {
    "id": "1",
    "name": "sangbin"
  }
}

CRUD

CREATE : POST /api/student
READ :   GET /api/student/1
UPDATE : PUT /api/student/1
DELETE : DELETE /api/student/1

 

🔑RESET 성숙도 모델 - 3단계

  • HATEOAS(Hypertext As The Engine Of Application State)라는 약어로 표현되며 하이퍼 미디어 컨트롤을 적용합니다.
  • 링크를 넣어 새로운 기능에 접근할 수 있다.

Request

GET /api/student/1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
 "result" {
    "id": "1",
    "name": "sangbin",
    "nextActions": {
       "/api/users/{studentId}/roles",
     }
  }
}

 

❗설계 규칙❗

1. URI에는 소문자 사용
2. Resourcedml의 이름이나 uri가 길어질 경우 하이픈(-)을 통해 가독성을 높일 수 있음
3. 언더바(_)는 사용하지 않음
4. 파일 확장자를 표현하지 않음

 

🔓Open API(공개 API)

개발자 라면 누구나 사용할 수 있도록 공개된 API를 말한다.

 

공공데이터

도로명 주소 조회 서비스, 동네 예보 정보 서비스 등 대한민국 정부에서 OPEN API로 운영 및 제공하는 데이터

주의 사항

  • API마다 정해진 이용수칙이 있고 그 이용수칙에 따라 제한 사항이 있다
  • 무제한으로 이용할 수 있다는 의미는 아님

공개 API는 API KEY를 통해서 데이터를 불러올 수도 있음

 

API Key

 

 

  • API Key는 서버의 문을 여는 열쇠입니다.
  • API 키는 호출하는 프로젝트, 즉 API를 호출하는 앱이나 사이트를 식별합니다.

자원의 접근할 수 있는 권한이 바로 API Key이다.

더 자세히 공부해 보고 싶다면 아래 사이트를 참고해주세요

https://cloud.google.com/docs/authentication/api-keys?hl=ko 

 

API 키를 사용하여 인증  |  Google Cloud

의견 보내기 API 키를 사용하여 인증 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에서는 API 키를 사용하여 Google Cloud API 및 서비스를 인증하는

cloud.google.com

 

 

728x90
반응형