REQUEST params vs query vs body

김상선·2022년 5월 24일
2

개념

request 객체는 API를 컨트롤 하기 위한 메소드로 3가지를 담고 있다.

  • param
  • query
  • body

path 파라미터와 query 파라미터 중 무엇을 사용할지 고민될 때,
REST API의 모범을 준수하자면 path 파라미터는 특정 리소스를 정의할 필요가 있을 때, query 파라미터는 정렬 혹은 필터링이 필요할 때 사용한다.
출처: https://yuda.dev/250

req.params

  • 주소에서 포함된 변수를 담는다.
  • path parameter는 엔드포인트의 일부이다.
  • 아래 예시의 엔드포인트에서 {user}와 {bicycleId}에 각각 그 값이 들어간다고 보면 된다.
    /service/myresource/user/{user}/bicycles/{bicycleId}
  • 원하는 조건의 데이터들 혹은 하나의 데이터에 대한 정보를 받아올때 적절하다.
  • 서버에서 Path Variable 로 칭한다.
// @route    GET api/posts/:id
// @desc     'get' 메소드를 써서 파라미터 프로퍼티인 id값에 맞는 포스트를 가져오는 요청

router.get("/:id", auth, async (req, res) => { // 'id'라는 프로퍼티
  try {
    const post = await Post.findById(req.params.id);
    res.json(post);
  } catch (err) {
    res.status(500).send("Server Error");
  }
});

req.query

  • 아래 예시의 엔드포인트에서 물음표(?) 뒤에 등장하며,변수를 담는다.
  • /surfreport?days=3&units=metric&time=1400
  • key=value로 이루어져 있고 &으로 연결할 수 있다.
  • 조건을 줘서 정제된 결과물을 얻을 수 있다.
  • filtering, sorting, searching에 적절.
  • 서버에서 Query parameter로 칭한다.
// GET /search?q=tobi+ferret
console.dir(req.query.q)
// '/search'라는 라우트 경로에서 query.q에 해당하는 값은 'tobi ferret'
// => 'tobi ferret'

// GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse
console.dir(req.query.order)
// '/shoes'라는 라우트 경로에서 query.order에 해당하는 값은 'desc'
// => 'desc'

console.dir(req.query.shoe.color)
// '/shoes'라는 라우트 경로에서 query.shoe.color에 해당하는 값은 'blue'
// => 'blue'

console.dir(req.query.shoe.type)
// '/shoes'라는 라우트 경로에서 query.shoe.type에 해당하는 값은 'converse'
// => 'converse'

req.body

  • URL에는 보이지 않는 오브젝트 데이터(XML, JSON, MultiForm)를 담는다.
  • 보통 POST를 사용하여 JSON 오브젝트를 request body 안에 넣어 보낸다.
  • request body에 key-value 데이터 쌍을 포함한다.
  • 기본적으로 정의되어 있지 않아 express.json(), express.urlencoded() 등의 미들웨어를 사용해야 한다.
// POST https://swamp.com/login
//
//      {
//        "email": "sam@gmail.com",
//        "password": "chompz4lyfe"
//      }

app.post('/login', (req, res) => { 
  // '/login'인 라우터 경로에 post 메소드를 써서 요청, 응답
  console.log(req.body.email) // "sam@gmail.com"
  console.log(req.body.password) // "chompz4lyfe"
})

참고자료 :
https://yuda.dev/250
https://velog.io/@haileeyu21/Session-RESTful-API-란-Path-parameters-Query-string
REST API의 기초와 설계 https://blog.neonkid.xyz/219

profile
일요일을 좋아합니다.

0개의 댓글