5_ REST API란

YoonJu Lee·2021년 7월 22일
0
post-thumbnail

1. 요청 형식

1) http 요청

• 모든 자원은 명사로 식별한다
• HTTP 경로로 자원을 요청한다
• Ex)
• GET /users
• GET /users/{id}
ex)

$ curl -X GET 'localhost:3000/users'

--> 처럼, /get_users는 사용하지 않고, 명사형으로만 사용한다.
특정 요청일 때는 /users/1 과 같이 쓴다.

2) HTTP 메서드

• 서버 자원에 대한 행동을 나타낸다. (동사로 표현)

• GET: 자원을 조회

$ curl -X GET 'localhost:3000/users'

• POST: 자원을 생성

$ curl -X POST 'localhost:3000/users' -[data]

: data를 기반으로 새로운 user를 만들어 달라. 라는 뜻이 될 것임.

• PUT: 자원을 갱신
• DELETE: 자원을 삭제
• 이는 익스프레스 어플리케이션의 메소드로 구현되어 있다

  • ex) 사용자가 요청을 GET / POST 로 하는 경우.

1) GET

$ curl -X GET 'localhost:3000/users'

한다면..

app.get('/users', (req, res) => {
  res.send('users list') 
})

2) POST

$ curl -X POST 'localhost:3000/users' [data]

요청하면,

app.post('/users', (req, res) => {
  // create user..
  res.send(user); // 만든 user을 응답.
})

만든 user로 응답한다.

2. 응답형식

HTTP 상태코드

  • 2XX: 자, 여기있어
    - 200: 성공(success), GET, PUT
    - 201: 작성됨(created), POST
    - 204: 내용 없음 (No Conent), DELETE
  • 4XX: 니가 문제임
    - 400: 잘못된 요청 (Bad Request)
    - 401: 권한 없음 (Unauthorized)
    - 404: 찾을 수 없음 (Not found)
    - 409: 충돌 (Conflict)
  • 5XX: 내가 문제임
    - 500: 서버 에러 (Interel server error)

3. 첫 API 만들기

: 사용자 목록 조회

1) 코드

const express = require('express')
const app = express()
const morgan = require('morgan')
const port = 3000
const users = [
  { id: 1, name: 'bek' },
  { id: 2, name: 'alice' },
  { id: 3, name: 'chris' },
]
// DB가 없으므로, 일단 배열을 넣어봄. 

app.use(morgan('dev'))

app.get('/users', (req, res) => {
  res.json(users)
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

2) 서버 구동

$ npm start


: 이렇게 구동 가능한 이유는 package.json 파일에 script로 등록 해 놨기 때문.

3) 요청

$ curl -X GET 'localhost:3000/users' -v 

4) 서버 쪽에서는..


이렇게 로그가 찍힘!!
( node의 morgan모듈은 로그를 찍는 모듈이다! morgan 모듈을 작동시켜서 이렇게 찍힌다.)

5) 출력된 정보.


부등호_ 왼 : 요청에 대한 정보
오른쪽 : 응답에 대한 정보.

*cf) morgan

출처: https://backback.tistory.com/335 [Back Ground]

현재 콘솔에 나오는 GET / 200 51.267 ms - 1539 같은 로그는 모두 morgan 미들웨어에서 나오는 것이다.
요청에 대한 정보를 콘솔에 기록해준다.

var logger = require('morgan');

app.use(logger('dev'));

함수의 인자로

  • dev

  • short

  • common

  • combined

등을 줄 수 있다.

인자에 따라 콘솔에 나오는 로그가 다르다.

dev인 경우 GET / 200 51.267 ms - 1539

보통 개발 시에는 short나 dev를 많이 쓰고,
배포 시에는 common이나 combined를 많이 사용한다.
인자를 바꿔서 로그가 어떻게 달라지는지 직접 확인해보자.

콘솔뿐만 아니라 파일이나 데이터베이스에 로그를 남길 수도 있다.

하지만 이러한 작업을 할때는 winston모듈을 더 많이 사용한다.

profile
Coder가 아닌 Engineer를 향해서.

0개의 댓글