동적 및 상태 저장 모의 서버

APIGit

2022-10-15

APIGit은 복잡한 비즈니스 로직을 쉽게 시뮬레이션할 수 있도록 동적이고 상태 저장이 가능한 프로그래밍 가능한 모의 서버를 지원합니다. HTTP 요청 메시지는 mock.define()을 사용하여 경로를 정의하고 URL 패턴, HTTP 동사 및 콜백 함수를 제공하여 처리됩니다. 예를 들어:

mock.define('/users', 'GET', function(req, res) {
    ...
  })

또는 POST 방식의 경우:

mock.define('/users', 'POST', function(req, res) {
    ...
  })

'DELETE', 'PUT' 및 'OPTIONS' 메소드와 같은 표준 HTTP 메소드가 지원됩니다. 제공하는 콜백 함수는 항상 요청 및 응답 객체라는 두 객체를 매개변수로 전달합니다. Request 개체에는 헤더, 본문 페이로드 및 매개 변수와 같은 수신 요청과 관련된 모든 데이터가 포함되어 있습니다. Response 개체를 사용하여 요청에 대한 응답을 작성합니다.

위의 예를 확장하여 사용자를 위한 기본 CRUD 서비스 구축을 시작하겠습니다. 먼저 사용자 집합을 반환하는 경로를 정의해 보겠습니다.

mock.define('/users', 'GET', function(req, res) {
    var users = [ 
      { username: "dave", email: "dave@gmail.com" },
      { username: "john", email: "john@gmail.com" }
    ]
  
    return res.json(users)
  })

res.json 호출은 호출 애플리케이션에 JSON 응답을 보냅니다. res 개체에서 응답 함수를 호출해야 합니다. 응답 함수가 없으면 서비스가 시간 초과되어 성공적인 결과를 반환하지 않습니다. 나중에 사용 가능한 다른 응답 기능을 살펴보겠습니다.

쿼리 매개변수를 사용하여 사용자의 나이를 기반으로 필터링 지원을 추가할 수 있습니다. req.query는 파싱된 쿼리 문자열을 포함하는 객체이며 기본값은 {}입니다. 'GET /users?age=30'에 대한 요청을 제출하면 req.query.age를 사용하여 연령 값에 액세스할 수 있습니다.

mock.define('/users', 'GET', function(req, res) {
    var users = [
      { username: "dave", email: "dave@gmail.com", age: 32 },
      { username: "john", email: "john@gmail.com", age: 30 }
    ]
  
    if (req.query.age) {
      // convert req.query.age from String to a Number before filtering
      return res.json(_.filter(users, { 'age': Number(req.query.age) }))
    }
  
    return res.json(users)
  })

LoDash _.filter 함수를 사용하여 제공된 연령과 일치하는 사용자 배열을 추출합니다. 연령 기준과 일치하는 사용자가 없으면 빈 배열이 반환됩니다. 전체 LoDash 라이브러리를 사용할 수 있으며 배열 및 개체를 조작하는 데 유용한 기능을 제공합니다.

단일 사용자를 검색하기 위한 경로를 생성하기 위해 서비스 URL 경로의 일부로 경로 매개변수를 사용합니다. 경로 매개변수는 {route_param_name} 구문을 사용하여 지정되므로 이 예에서 사용자 이름으로 사용자를 검색하는 URL 경로는 /users/{username}입니다. req.params는 명명된 경로 매개 변수에 매핑된 속성을 포함하는 개체이며 사용자 이름은 req.params.username으로 사용할 수 있습니다.

mock.define('/users/{username}', 'GET', function(req, res) {
    var users = [
      { username: "dave", email: "dave@gmail.com", age: 32 },
      { username: "john", email: "john@gmail.com", age: 30 }
    ]
  
    // respond with the user or an empty object if user doesnt exist
    return res.json(_.find(users, { 'username': req.params.username }) || {})
  })

사용자 생성을 위한 경로를 추가해 보겠습니다. 요청과 함께 사용자 이름이 전송되었는지 확인하고 누락된 경우 400 오류로 응답합니다. POST 요청에서 본문 페이로드로 전송되는 데이터는 req.body 개체에서 액세스할 수 있습니다.

mock.define('/users', 'POST', function(req, res) {
    // validate username is present
    if (req.body.username === undefined) {
      return res.json(400, { error: { message: "Missing username" } })
    }
  
    return res.json({ status: "ok" })
  })

기본적으로 모든 응답은 200을 반환합니다. res.json에 대한 유일한 매개 변수로 숫자가 제공되면 응답 본문 문자열이 할당됩니다. 예를 들어 400은 "잘못된 요청"으로 응답합니다. 위의 예에서 사용자 지정 오류 메시지를 지정했습니다.

그것은 견고한 시작입니다. 간단한 미리 준비된 답변을 반환하는 서비스로 많은 일을 할 수 있지만 지금까지만 얻을 수 있습니다. 데이터를 유지하고 응답을 동적으로 생성하여 서비스에 현실적인 동작을 추가해 보겠습니다.