Post

[Java] Rest API

[Java] Rest API

Rest API

Rest API 라고 따로 API 가 존재하는게 아니다.

내가 만든 API 가 Restful 하면 Rest API 라고 부를 수 있다

그럼 Restful 하다는게 뭐냐?

기본적으로 몇가지 규칙을 지켜야함

  1. Uniform - Interface

API에서 자원들이 각각의 독립적인 인터페이스를 가지는데 각각 자원들이 (url 자원식별, 표현을 통한 자원조작, Self-descriptive messages, HATEOAS 구조) 를 가져야함

독립적인 인터페이스라는 것은 서로 종속 X

예 ) 웹페이지를 변경했다고 웹브라우저 버전에 영향을 받으면 안됨

Http버전에 따라 웹페이지를 수정하는 일이 없어야함

URL 자원식별

내가 ~/product/icecream 을 요청하면 icecream 자원을 반환해줘야 함

  1. Stateless

API 가 제공해주는 서버는 세션을 해당 서버쪽에서 유지하지 않는다.

예를 들어 내가 로그인 했던 기록이 서버에 남아있으면 안됨. 새로고침 했을때 로그인이 그대로 되어있는 페이지라면 Restful하지 않다고 할 수 있음

http 자체가 Stateless 하긴 함

  1. Caheable

일단 캐싱은 API가 응답 데이터를 일시적으로 저장해서 같은 요청이 발생하면 재사용해서 서버 부하를 줄이고 속도 빠르게 하는거임

HTTP는 원래 캐싱을 지원함.

캐싱이 가능하다는건 HTTP 메서드 중에 GET에만 한정됨

  1. Client - Server 구조

클라이언트와 서버가 서로 독립적인 구조를 가짐.

클라이언트가 HTTP 표준만 잘 지키고, 서버는 그에 맞는 API로 비즈니스 로직처리만 잘 하면 문제 없음.

REST API 의 URL 규칙

​ 자원을 표기하는 URL은 아래 6가지 규칙을 지켜야 함

​ 1. 동작은 HTTP 메소드로만 해야 하고 URL에 해당 내용이 들어가면 안됨

​ 수정,삭제,추가,조회를 put delete post get 방식을 써야지 /books/delete/1 이런식으로 하면 된다는 거임.

​ 2. jpg .png 같은 확장자는 표시 X

​ 3. 동사가 아닌 명사로만 표기

​ 유저가 책을 소유한다 => 유저/유저아이디/inclusion/책/책아이디 이런식으로 쓰자

​ getAllUser같이 동사 넣지 말고

​ 4. 계층적인 내용을 담아야함

​ /집/아파트/전세 이런 느낌으로

​ 5. 대문자가 아닌 소문자로만 써야 하며 띄어쓰기는 _가 아닌 - 를 쓴다 .

​ 6. HTTP 응답 상태코드를 적절히 사용한다

​ 성공시에는 200 , 리다이렉트는 301 등등

RESTful API 를 쓰면 좋은점

HTTP 프로토콜을 사용하고 자원 지향적인 구조를 가짐.

즉 API의 엔드포인트가 명확하게 자원을 나타내고 HTTP 메소드로 자원을 처리할때 명확히 보이기 때문에 사용하기가 쉬움. 그렇기 때문에 다양한 클라이언트에서 쉽게 사용가능하다는것을 의미. 또 이는 개발자들끼리 약속이기 때문에 유지보수시 더 쉽게 이해할 수 있을 것임. 그러다보면 라이브러리, 개발 도구도 더 빠르고 통일되게 만들 수 있을 것 같고 그렇게 발전된거 같다.

아까 Restful 아키텍처는 Stateless 이기 때문에 시스템을 확장하기 용이함. 또 캐싱을 통한 성능이 좋음

This post is licensed under CC BY 4.0 by the author.