반응형

안녕하세요. 오늘은 restful api의 규칙을 알아봅시다.

 

REST 란 ?

REST 란 “Representational State Transfer” 의 약자이다. 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.

REST란, “웹에 존재하는 모든 자원(이미지, 동영상, DB 자원)에 고유한 URI를 부여해 활용하는 것으로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 의미한다고 한다.

이런 REST의 형식을 따른 시스템을 RESTful 이라고 부른다.

HTTP URI 를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원의 대한 CRUD Operation을 적용한다.

CRUD Operation , HTTP Method

  1. Create : POST (자원 생성)
  2. Read : GET (자원의 정보 조회)
  3. Update : PUT (자원의 정보 업데이트)
  4. Delete : DELETE (자원 삭제)

REST 의 특징

  1. 클라이언트 / 서버 구조 (Client-Server)
    자원이 있는 Server , 자원을 요청하는 Client의 구조를 가진다.
  2. 무상태 (Stateless)
    HTTP는 Stateless 프로토콜 이므로 REST 역시 무상태성을 가진다. 클라이언트의 Context 를 서버에 저장하지 않는다.
  3. 캐시 처리 가능 (Cachealble)
    웹 표준 HTTP 프로토콜을 그대로 사용하므로 , 웹에서 사용하는 기존의 인프라를 그대로 활용 가능하다.
  4. 계층화
    API 서버는 순수 비즈니스 로직을 수행하고 그 앞단에 사용자 인증 , 암호화 , 로드밸런싱 등을 하는 계층을 추가하여 구조상의 유연성을 줄 수 있다.
  5. 인터페이스 일관성(Uniform Interface)
    URI로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다. HTTP 표준에만 따른다면 모든 플랫폼에 사용이 가능하다.
  6. 자체 표현 구조
    동사(Method) + 명사(URI) 로 이루어져있어 어떤 메서드에 무슨 행위를 하는지 알 수 있으며 REST API 자체가 매우 쉬워서 API 메세지 자체만 보고도 API를 이해할 수 있다

REST의 장단점

장점

  1. 쉬운 사용
    HTTP 프로토콜 인프라를 그대로 사용하므로 별도의 인프라를 구축할 필요가 없다.
  2. 클라이언트-서버 역할의 명확한 분리
    클라이언트는 REST API를 통해 서버와 정보를 주고받는다. REST의 특징인 Stateless에 따라 서버는 클라이언트의 Context를 유지할 필요가 없다.
  3. 특정 데이터 표현을 사용가능
    REST API는 헤더 부분에 URI 처리 메소드를 명시하고 필요한 실제 데이터를 ‘body’에 표현할 수 있도록 분리시켰다. JSON , XML 등 원하는 Representation 언어로 사용 가능하다.

단점

  1. 메소드의 한계
    REST는 HTTP 메소드를 이용하여 URI를 표현한다. 이러한 표현은 쉬운 사용이 가능하다는 장점이 있지만 반대로 메소드 형태가 제한적인 단점이 있다.
  2. 표준이 없음
    REST는 설계 가이드 일 뿐이지 표준이 아니다. 명확한 표준이 없다.

 

REST의 설계

REST API 설계시 가장 중요한 항목은 아래 두가지이다.

  1. URI는 정보의 자원을 표현해야 한다는 점
  2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다는 점


1. 소문자를 사용한다. 

주소에서 대소문자를 구분하므로, 카멜방식이 아닌 소문자를 사용하여 작성한다.

//안좋은 예
https://localhost:8080/ddoriya/user/getUsers

//좋은 예
https://localhost:8080/ddoriya/user/get-users

 

2. 가급적 하이픈 사용은 최소화하지만 정확한 표현을 위해 - 을 사용하여 사용구분을 만든다.

가급적 하이픈의 사용도 최소화하며, 정확한 의미나 표현을 위해 단어의 결합이 불가피한 경우에 사용한다.

//안좋은 예
https://localhost:8080/ddoriya/user/getUsers

//좋은 예
https://localhost:8080/ddoriya/user/get-users

 

3.파일 확장자는 URI에 포함시키지 않는다.

REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않습니다. Accept header를 사용하도록 한다.

//안좋은 예
GET https://localhost:8080/ddoriya/user/photo.jpg

GET https://localhost:8080/ddoriya/user/photo 
HTTP/1.1 Host: restapi.example.com Accept: image/jpg



4. 가급적 전달하고자하는 자원의 명사를 사용하되, 컨트롤 자원을 의미하는 경우 예외적으로 동사를 허용한다.

//안좋은 예
https://localhost:8080/ddoriya/posts/duplicating

//좋은 예
https://localhost:8080/ddoriya/posts/duplicate



'JAVA' 카테고리의 다른 글

CentOS File 인코딩  (0) 2021.11.30
JAVA CS핵심 내용  (0) 2021.03.10
java 리스트간 비교, 값 체크  (0) 2021.02.24
Kafka  (0) 2021.02.24
RestTemplate VS WebClient  (0) 2021.02.24

+ Recent posts