이동욱 님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 차근차근 따라가면서 웹 프로젝트를 진행하고 있는 중에 <"컨트롤러에서 맵핑된 방식으로 js에서도 매핑이 되어야 한다. (이는 REST 규약에 맞게 설정된 것이다.)"> 괄호안의 REST 규약이라는 단어의 정의를 잘 몰랐는데 웹 과정 수업을 들으면서 언뜻? 언급돼었던 기억이 났다. 생각이 난 김에 REST(?)란 무엇인지 알아보고 가는 시간을 가지기로 했다.
REST API
웹 어플리케이션에서 제공하는 모든 자원을 URI를 할당하여 활용하는 방식
GET, POST, PUT, DELETE 가 대표적이다.
생겨난 이유
하드웨어와 소프트웨어의 발전으로 인해 프레임 워크 / 라이브러리의 발전과 앱이 등장했고, 클라이언트와 서버의 분리로 생겨났습니다. 하나의 어플리케이션에서 클라이언트와 서버를 관리하던 추세에서 앱의 등장이 있었고 확장성과 안정성을 위해 분산 애플리케이션과 API 서버가 일반화되고 있다.
작성 시 지켜야 할 규칙
복수 명사를 사용한다
ex) usersGET(read), POST(create), PUT(update), DELETE(delete) 각각의 기능을 지킨다.
ex) GET / user/123? delete : GET을 사용하고 삭제를 요청하면 안 된다.POST로 arguments를 보내지 않도록 한다
ex) RESTful API 보안은 HTTP header에 인증정보를 포함하여 https로 처리하는 방법 과
ex) Aouth2가 있다Sub-Resource를 관계 설정을 위해 사용한다
ex) GET /users/123/friends : 유저 123의 친구목록을 보여준다.
ex) GET /users/123/friends/1 : 유저 123의 친구 1번을 보여준다camlCase 표기법을 사용한다
ex) 단봉낙타표기법 : selectName
ex) 스네이크표기법 : select_NameHATEOAS를 사용한다 : link를 제공하여 동적으로 URL을 관리하는 방법이다
{
"name" : "kim"
"link" : [{
"rel" : "self",
"href" : "http://localhost:8080/addressServer"
}]
}
Filtering을 지원한다
ex) GET /users?name=kim순서 정렬
ex) GET /users?sort=-name(내림차순),+address(오름차순) +와-로 구분field selection : 원하는 필드만 볼 수 있게 API 되어야 한다
ex) GET /users?fields=name,age,addresspaging : 몇 개의 데이터를 보여줄것인지 정한다.
ex) GET /users?offset=10&limit=5페이징시 사용자 전체 개수를 보낼 때는 custom HTTP header : x-Total-Count로 보낸다
버전 관리를 한다. v로 시작
ex) /address/api/v1Error처리해서 에러 이유를 되돌려준다.
ex)
200 OK
201 CREATED
400 BAD REQUEST
500 INTERNAL SERVER ERROR보안으로 session은 사용하지 않고 매 Request마다 인증한다.
HTTPS만 사용한다.
Query String을 사용한다.
지켜야 할것들이 많기 때문에 익숙해지기 위해서는 의식적으로 적응을 해야할 것같다.
'프로그래밍 공부 > WEB' 카테고리의 다른 글
Gradle5.x에서 Lombok 적용안되는 이슈 (0) | 2020.03.15 |
---|