본문 바로가기
CS

[CS] REST API 성숙도가 있어?

by nozee 2025. 1. 3.
반응형

Rechardoson의 REST API 성숙도 모델

 

성숙도 모델은 총 4단계로 이루어져 있으며 각 단계의 조건에 만족할 수록 REST API에 가까워 진다.

 

 

 

Level 0

Level 0은 웹 매커니즘을 사용하지 않고 HTTP를 원격 호출을 위한 전송 시스템으로 사용하는 경우이다.

하나의 End-point를 사용 HTTP Method도 POST만 사용, 매개변수를 통해서 다르게 동작하도록 설계

 

Request

POST /api/user
{
    "function": "getUser",
    "arguments" : {
        "1"
    }
}

 

Response

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

 

CRUD

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

 

 

Level 1 : Resource

Level 1은 리소스 개념을 도입한다. 모든 요청을 하나의 End-point로 보내는 것이 아니라 개별 리소스와 통신하게 된다.

 

Request

POST /api/user/create
{
    "name" : "user"
}

 

Response

HTTP/1.1 200 OK
{
    "result" : {
     "error" : "already exist member"
    }
}

 

CRUD

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

 

 

Level 2 : HTTP Verbs

Level 2는 4가지 HTTP Method를 사용해서 CRUD를 표현하고 StatusCode도 활용하여 반환한다.

 

URI에는 행위(Action)이 포함되지 않고 HTTP Method로 표현

헤더에 Content-Type을 제공하고 *멱등성을 보장하는 GET의 경우 캐시가 적용된다.

 

멱등성 : 동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때,  해당 HTTP 메서드가 멱등성을 가졌다고 말한다.
올바르게 구현된 경우 GET, HEAD, PUT, DELETE 메서드는 멱등성을 가지며, POST는 그렇지 않다.

 

 

Request

POST /api/users
{
    "name" : "user"
}

 

Response

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

 

CRUD

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

 

 

Level 3 : Hypermedia Controls

API 서비스의 모든 End-point를 최초 진입점이 되는 URI를 통해 Hypertext Link 형태로 제공한다.

추가적으로 다음 Request에 필요한 End-point까지 제공을 한다.  

이는 Uniform Interface의 HATEOAS를 의미한다.

 

Request

GET /api/

 

Response

HTTP/1.1 200 OK
Content-tupe: application/json
{
    "/api/users",
    "/api/users/{userId}/roles",
    "/api/products",
    "/api/..."
}

 

Request

GET /api/users/1

 

Response

HTTP/1.1 200 OK
Content-tupe: application/json
{  
    "result" : {
     "id" : "1",
     "name" : "user",
     "_links" : {
            "self" : {
                "href" : "https://api.example.com/api/users/1"
            },
            "update" : {
                "href" : "https://api.example.com/api/users/1"
            },
            "list" : {
                "href" : "https://api.example.com/api/uesrs"
            }
        }
    }
}

 

긴 글 읽어 주셔서 감사합니다.
반응형

'CS' 카테고리의 다른 글

[CS] 클린 코드 책 요약  (3) 2024.12.27
[CS] CORS는 무엇일까?  (0) 2024.12.26
[CS] Test Double  (0) 2024.12.19
[OAUTH] OAuth 2.1  (2) 2024.12.14
[CS] JOSE  (1) 2024.12.11