RESTful API 특징과 규칙

728x90

이동욱 님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 차근차근 따라가면서 웹 프로젝트를 진행하고 있는 중에 <"컨트롤러에서 맵핑된 방식으로 js에서도 매핑이 되어야 한다. (이는 REST 규약에 맞게 설정된 것이다.)"> 괄호안의 REST 규약이라는 단어의 정의를 잘 몰랐는데 웹 과정 수업을 들으면서 언뜻? 언급돼었던 기억이 났다. 생각이 난 김에 REST(?)란 무엇인지 알아보고 가는 시간을 가지기로 했다.

REST API

웹 어플리케이션에서 제공하는 모든 자원을 URI를 할당하여 활용하는 방식

GET, POST, PUT, DELETE 가 대표적이다.

생겨난 이유

하드웨어와 소프트웨어의 발전으로 인해 프레임 워크 / 라이브러리의 발전과 앱이 등장했고, 클라이언트와 서버의 분리로 생겨났습니다. 하나의 어플리케이션에서 클라이언트와 서버를 관리하던 추세에서 앱의 등장이 있었고 확장성과 안정성을 위해 분산 애플리케이션과 API 서버가 일반화되고 있다.

작성 시 지켜야 할 규칙

  1. 복수 명사를 사용한다
    ex) users

  2. GET(read), POST(create), PUT(update), DELETE(delete) 각각의 기능을 지킨다.
    ex) GET / user/123? delete : GET을 사용하고 삭제를 요청하면 안 된다.

  3. POST로 arguments를 보내지 않도록 한다
    ex) RESTful API 보안은 HTTP header에 인증정보를 포함하여 https로 처리하는 방법 과
    ex) Aouth2가 있다

  4. Sub-Resource를 관계 설정을 위해 사용한다
    ex) GET /users/123/friends : 유저 123의 친구목록을 보여준다.
    ex) GET /users/123/friends/1 : 유저 123의 친구 1번을 보여준다

  5. camlCase 표기법을 사용한다
    ex) 단봉낙타표기법 : selectName
    ex) 스네이크표기법 : select_Name

  6. HATEOAS를 사용한다 : link를 제공하여 동적으로 URL을 관리하는 방법이다

{  
     "name" : "kim"  
     "link" : [{  
                    "rel" : "self",  
                    "href" : "http://localhost:8080/addressServer"  
                }]  
}
  1. Filtering을 지원한다
    ex) GET /users?name=kim

  2. 순서 정렬
    ex) GET /users?sort=-name(내림차순),+address(오름차순) +와-로 구분

  3. field selection : 원하는 필드만 볼 수 있게 API 되어야 한다
    ex) GET /users?fields=name,age,address

  4. paging : 몇 개의 데이터를 보여줄것인지 정한다.
    ex) GET /users?offset=10&limit=5

  5. 페이징시 사용자 전체 개수를 보낼 때는 custom HTTP header : x-Total-Count로 보낸다

  6. 버전 관리를 한다. v로 시작
    ex) /address/api/v1

  7. Error처리해서 에러 이유를 되돌려준다.
    ex)
    200 OK
    201 CREATED
    400 BAD REQUEST
    500 INTERNAL SERVER ERROR

  8. 보안으로 session은 사용하지 않고 매 Request마다 인증한다.

  9. HTTPS만 사용한다.

  10. Query String을 사용한다.

지켜야 할것들이 많기 때문에 익숙해지기 위해서는 의식적으로 적응을 해야할 것같다.

728x90

'프로그래밍 공부 > WEB' 카테고리의 다른 글

Gradle5.x에서 Lombok 적용안되는 이슈  (0) 2020.03.15