* REST란?
Representational State Transfer의 약자
자원(URI), 행위(HTTP Method), 표현(Representations)로 구성되어 있다.
* API란?
Application Programming Interface의 약자
서로 다른 프로그램간에 소통할 수 있게 도와주는 통신 규약을 뜻한다.
이걸 웹에서 사용하면
'서버와 고객간의 통신 규약'을 뜻한다.
조금 더 쉽게 풀어말하면 '서버에게 요청해서 데이터 가져오는 방법' 이 바로 API이다.
ex) "/write로 접속하면 write.html을 보내주세요" 와 같은것이 서버의 API이다.
* REST API는 무엇인가
Representational State Transfer API 디자인 방법입니다.
(RESTful하게 API를 짜면 좋다.)
* REST API 설계시 유의점
- URI는 정보의 장원을 표현해야 한다.
- 자원에 대한 행위는 GET, POST, PUT, DELETE 등 HTTP Method로 표현한다.
1. Uniform Interface (가장 중요)
Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말합니다.
* 인터페이스는 일관성이 있어야한다는 소리
- 하나의 URL로는 하나의 데이터를 가져와야함 (하나를 가져오기 위한 두개의 URL을 만들지 말자)
- 간결하고 예측 가능하게 구성 (URL 보고 예측 가능하게)
- 요청과 응답은 정보가 충분히 들어있어야 함
- URL 이름짓기 관습을 잘 따라주세요
(참고) URI와 URL의 차이
* URI
URI는 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미한다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다.
* URL
URL은 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다.
URL 대신 URI 용어를 많이 쓰기도 하는데 URI는 자료를 넘버링하고 분류하고 지칭하는 방법보면 된다.
URL과 비슷하지만 조금 더 큰 의미입니다.
ex) 도서관에서 책 분류할 때 URI에 의해서 분류하기도 합니다.
2. Client-server 역할 구분하기
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 됩니다.
Client에게 서버와 같은 역할을 할 수 있게 해주거나 DB안에 있는 자료를 직접 건들 수 있는 코드를 짜면 안된다.
- 브라우저는 요청만
- 서버는 응답만
3. Stateless
REST는 무상태성 성격을 갖습니다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않습니다.
세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다.
(참고)
요청들은 각각 독립적으로 처리되어야한다.
요청1이 성공해야 요청2를 보내주고 그런 식으로 요청간의 의존성이 존재하는 코드를 짜면 안된다.
요청하나 만으로 자료를 가져오기 충분하도록 요청에 필요한 모든 정보들을 실어 보내야 한다.
4. Cacheable
REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능합니다
따라서, 요청을 통해 보내는 자료들은 HTTP가 가진 캐싱 기능이 적용 가능합니다.
그리고 캐싱가능하다고 표시하거나 캐싱 기간을 설정해주어야 한다.
* 캐싱이란?
네이버를 방문하면 크롬 브라우저는 자동으로 자주 사용하는 이미지 파일, CSS 파일 등을 하드에 저장해놓습니다.
ex) 네이버 로고나 아이콘
하드에 저장해놓고 네이버 방문할 때 네이버서버에 네이버 로고주세요.라고 요청하지 않고 하드에서 불러옵니다.
이를 캐싱이라고 합니다.
- 서버에서 보내주는 정보들은 캐싱이 가능해야함
- 캐싱을 위한 버전 같은 것도 관리 잘해야함
5. Layered System(계층형 구조)
요청처리하는곳, DB에 저장하는곳 이런 여러가지 단계를 거쳐서 요청을 처리해도 됩니다.
여러개의 레이어를 거쳐서 요청을 처리하게 만들어도 된다
6. Code on Demand
Client에 보내는 데이터를 바로 실행 가능한 코드를 보내서 이것을 Client에서 실행하는 것
* URL naming Guide
- 소문자를 사용한다.
- 언더바 대신 하이픈을 사용한다.
- URI의 마지막에는 슬래시를 포함하지 않는다.
- 계층관계를 나타낼 때는 슬래시 구분자를 사용해야한다.
- 파일 확장자는 URI에 포함시키지 않는다.
- 전달하고자 하는 자원의 명사를 사용하되, 컨트롤 자원을 의미하는 경우 예외적으로 동사를 허용한다.
- URI에 작성되는 영어를 복수형으로 작성한다.
(참고) 구글에 "rest api 네이밍 규칙"을 검색하여서 확인해서 다양한 예시를 확인하는것도 좋다.
'Study > Node.js' 카테고리의 다른 글
[Node.js] Mongodb Database에 자료 저장하는 법 (0) | 2022.04.16 |
---|---|
[Node.js_study] MongoDB 셋팅하기 (0) | 2022.04.16 |
[Node.js_study] 폼에 입력한 데이터를 서버에 전송하기 (POST요청) (0) | 2022.04.15 |
[Node.js_study] 서버에서 HTML 파일전송(GET요청) (0) | 2022.04.15 |
[Node.js_study] 서버에 GET 요청 처리 해보기 (0) | 2022.04.15 |