Rest API 정리 & Express

Hover·2023년 4월 17일
0

Javascript

목록 보기
6/6

Rest API

1. Rest API 란?

Rest API는 웹에서 사용되는 데이터나 자원을 HTTP URL로 표현하고 HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식 이다.

2. Rest API 구성 요소

구성 요소내용
자원URI
행위HTTP METHOD
표현자원에 대한 행위의 내용

3. Rest API 규칙

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는 수정의 용도로 사용한다.

4. Rest API 로 CRUD 하기

METHOD역할
POSTpost를 통해 URI를 요청하면 리소스를 생성
GETGET을 통해 해당 리소스 또는 리소스에 있는 정보를 조회
PUTPUT를 통해 해당 리소스를 수정
DELETEDELETE를 통해 리소스를 삭제

Express

위 내용은 Express 문서를 참고하고 작성하였다.

1. 간단한 웹 서버 만들기

디렉토리의 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}`)
})

2. 메서드와 URL에 따라 분기(라우팅)

라우팅은 URL과 HTTP Method에 따라 엔드포인트에서의 앱이 응답하는 방법을 정한다.

app.Method(path,(req,res));
  • Method : GET/POST/PUT/DELETE 등 HTTP METHOD
  • PATH : 서버 경로,엔드포인트
  • (req,res) : 각각 요청,응답으로 라우트가 일치할 때 실행하는 함수.

3. 미들웨어

미들웨어는 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을 가져와 코드를 실행해준다.

profile
프론트엔드 개발자 지망생입니다

0개의 댓글