ReST(Representational State Transfer)
- 웹 서비스를 만드는데 사용되는 제약(constraint) 모음
- 웹을 망가뜨리지 않고 HTTP를 개선하기 위해 리소스마다 서로 다른 API 규칙을 적용
- ReST에서 정보의 가장 핵심적인 추상화는 Resource
- 이름 붙일 수 있는 정보면 어떤 것이든 리소스가 될 수 있음
Constraints
- Client-Server : HTTP
- Stateless : HTTP
- Cacheable : HTTP
- Uniform Interface : HTTP
- Layered System : HTTP
- Code on Demand(Optional) : JavaScript
Best Practices
1. 리소스를 나타내는 데 명사를 사용
- 4가지 대분류 : collection, document, store, controller/* 차례대로 collection, document, store, controller */ /user-management/users /user-management/users/{id} /cart-management/users/{id}/carts /cart-management/users/{id}/cart/checkout
- 일관성이 핵심
- 계층 구조를 나타낼 때는 '/' 사용
- URI 가독성을 높이기 위해 '-' 사용
- URI에 소문자 사용
- URI 끝에 '/' 사용하지 말 것
- '_'은 사용하지 말 것
- 파일 확장자 사용하지 말 것
- CRUD기능 이름은 URI에 사용하지 말 것: GET, POST, PUT, DELETE
- filter가 필요하면 Query Component 사용
/* Query 사용*/ /managed-devices?region=USA&brand=XYZ&sort=installation-date
CommonJS
- 모든 모듈은 자신만의 독립적인 실행 영역이 있음
- 모듈 정의는 전역객체인
exports
객체를 이용- 모듈 사용은
require
함수를 이용
module.exports VS exports
(1) module.exports
// hello.js
exports.anything = function() {
console.log('I am anything.');
};
// hello-runner.js
const hello = require('./hello');
console.log(hello); // {anything: Function}
hello.anything(); // I am anything.
(2) exports
// hello.js
module.exports.anything = function() {
console.log('I am anything.');
};
// hello-runner.js
const hello = require('./hello');
console.log(hello); // {anything: Function}
hello.anything(); // I am anything.
exports
는 module.exports
사용을 도와주는 helper로써 단지 module.exports
를 참조할 뿐임
// hello.js file
module.exports = {a: 1}
// hello-runner.js
const hello = require('./hello');
console.log(hello); // {a: 1}
// hello.js file
exports = {a: 1}
// hello-runner.js
const hello = require('./hello');
console.log(hello); // { }
자료 출처: 코드스테이츠(CodeStates)