컴퓨터 사이언스

REST API [간단정리]

woohap 2024. 11. 21. 17:43
어떤 방식으로 요청하고, 어떤 방식으로 응답할지를 지정해 놓은 다양한 형식들 중 하나 
요청의 메서드와 URI 자체가 목적을 명확히 나타나도록 작성해야 함 
-> URI만 보고도 어떤 기능을 할지 추측하도록 작성해야 함 

REST API 특징

1. 리소스 기반 구조
        모든 것을 리소스로 표현, 각 리소스는 고유한 URI를 가진다.
        URI에 어떤 자원에 관한 것인지 표현해야함 // 가능한 해당 자원에 대해서만 표현해야함

        유저에 관한 URI
        GET /Users/{id}      // id 값으로 유저 정보 조회 
        DELETE /Users/{id}   // id 값을 갖는 유저 정보 제거 

        리소스 예시
        Users, members, boards, comments 

2. 상태 없음 (Stateless) 
        REST API 자체는 무상태여야한다. 즉 각 요청은 다른 요청과 독립적이며 서버는 클라이언트 상태를 저장하지 않는다.
        서버는 클라이언트의 상태를 최대한 저장하지 말아야한다. (세션 사용을 최소화)
        -> 그래서 JWT 토큰을 로컬 스토리지에 저장했다가 요청할 때마다 전송하는 방법을 주로 사용 
        각 요청은 필요한 모든 정보를 포함해야 함, 

        어떤 응답을 보냈는지, 받았는지는 기억해두는게 좋다.

3. 균일한 인터페이스 
        URI를 통해 리소스를 식별하고 HTTP 메서드로 리소스를 조작한다. 
        HTTP 메서드를 사용하여 리소스를 조작합니다. (GET, POST, PUT, DELETE 등)를 사용하여 리소스 조작
        HTTP 메서드를 사용하여 동일한 URI로 다양한 작업을 수행할 수 있음을 의미한다.

4. 클라이언트 서버 구조
        클라이언트와 서버의 역할이 명확히 구분됩니다. 
        서버의 경우 API를 제공하면 되고 클라이언트는 필요한 데이터와 함께 API 요청을 만들면 된다.

5. 상태코드를로 각 요청이 어떻게 처리되었는지 명확히 나타내주어야 한다.

6. 캐싱 
        어떤 응답을 캐시하여 성능을 향상시킴 // 불필요한 DB 접근을 할 필요가 없다. 
        RESTful API는 각 요청이 나타내는 바가 뚜렷하므로 그것마다 캐싱 해두기 수월 

기본 형식 및 각 HTTP 메서드 의미

/버전정보/리소스(복수형)
/v1/books/{number}

[GET]
실무에서 특정 데이터를 조회할 때 페이지 정보와 사이즈를 쿼리 파라미터로 받는다.
GET /v1/books?page=5&size=10

고유한 책 정보를 요청 
GET /v1/books/{id}

각 리소스는 상위 또는 하위 리서스를 가질 수 있다.
응답을 받고자하는 정보 뿐만 아니라 리소스들이 서로 어떤 관계를 갖는지 URI를 통해 쉽게 파악 가능 
Ex)
책의 경우 각 책의 리뷰가 달릴 수 있으므로 하위 리소스로 리뷰를 넣으면 된다.
/v1/books/{id}/reviews

[POST]
POST /v1/books
등록시 응답으로 새로 추가된 정보를 응답으로 돌려줘야 한다. // 자동으로 부여된 색인 정보 포함 
Ex)
{
    "id": 4, // 색인 정보
    "title": "Effective Java",
    "author": "Joshua Bloch",
    "published_date": "2008-05-28",
    "isbn": "9780321345580",
    "status": "available" // 색인 정보
}

[PUT, PATCH]
PUT, PATCH /v1/books/1
PUT의 경우 결과 여부 혹은 수정된 결과 전체를 응답해야 함 
PATCH 실행 결과를 보내주면 된다. 

[DELETE]
DELETE /v1/books/1
응답으로 실행 결과를 보내주면 된다.