Rest API는 웹에서 사용되는 데이터나 자원을 HTTP URL로 표현하고 HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
이다.
구성 요소 | 내용 |
---|---|
자원 | URI |
행위 | HTTP METHOD |
표현 | 자원에 대한 행위의 내용 |
Rest API 에서 중요한 규칙은 두 가지다.
1) URI는 정보의 자원을 표현해야 한다.
# 나쁜 예시
GET /getData/1
POST /intoData/1
# 좋은 예시
GET /Datas/1
2) 자원에 대한 행위는 HTTP METHOD로 표현한다
# 나쁜 예시
GET /Datas/delete/1
# 좋은 예시
DELETE /Datas/1
또한 각각 기능에 맞는 HTTP METHOD를 사용해야한다.
예시로, 회원 정보를 추가할 때는 GET은 옳바른 메소드가 아니다.
HTTP METHOD에도 몇 가지 규칙이 있다.
- GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다.
- POST 메서드는 요청마다 새로운 리소스를 생성하고 PUT 메서드는 요청마다 같은 리소스를 반환한다.
- PUT은 교체, PATCH는 수정의 용도로 사용한다.
METHOD | 역할 |
---|---|
POST | post를 통해 URI를 요청하면 리소스를 생성 |
GET | GET을 통해 해당 리소스 또는 리소스에 있는 정보를 조회 |
PUT | PUT를 통해 해당 리소스를 수정 |
DELETE | DELETE를 통해 리소스를 삭제 |
위 내용은 Express 문서를 참고하고 작성하였다.
디렉토리의 app.js 파일에 다음과 같은 코드를 추가한다.
const express = require('express')
const app = express()
const port = 3000 // 서버를 시작하며 3000번 포트에서 연결을 시도함
app.get('/', (req, res) => { // '/' 루트 url이고 HTTP Method가 get일때 response로 "hello world"를 보낸다.
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
라우팅은 URL과 HTTP Method에 따라 엔드포인트에서의 앱이 응답하는 방법을 정한다.
app.Method(path,(req,res));
미들웨어는 express의 가장 큰 장점이다.
Request에 엔드포인트에 따라 실행하는 함수가 결정된다.
app.use("/endpoint",function());
Express 4.16버전 이후부터는 Express 내장 미들웨어인 express.json()
을 사용한다
app.use(cors()); // 모든 요청에 대해 cors 적용
app.use(express.json()); // request의 body를 구조화할 때 사용
우선, 미들웨어를 사용할 라우터를 가져온다
// url endpoint
const flightRouter = require("./router/flightRouter");
const bookRouter = require("./router/bookRouter");
const airportRouter = require("./router/airportRouter");
이후 app에서 사용한다고 선언을 해준다
app.use(cors()); // 모든 요청에 대해 cors 적용
app.use(express.json()); // request의 body를 구조화할 때 사용
app.use("/flight", flightRouter);
app.use("/book", bookRouter);
app.use("/airport", airportRouter);
// 각 endpoint에서 해당 middleware 실행
엔드포인트와 라우터를 연결 해준다.
router.get('/', findAll);
router.get('/:phone', findByPhone);
router.get('/:phone/:flight_uuid', findByPhoneAndFlightId);
router.post('/', create);
각 라우터에는 HTTP method와 url path에 따른 함수(컨트롤러)가 연결되어있다.
findByPhone: (req, res) => {
console.log("find by phone");
const { phone } = req.params;
if (phone !== undefined) {
let newlist = booking.filter((it) => {
return it.phone === phone;
});
return res.status(200).json(newlist);
}
return res.status(200).json(booking);
},
위 코드는 GET 메소드일때 실행되는 함수다.
req에서 param을 가져와 코드를 실행해준다.