LoginSignup
1
0

More than 5 years have passed since last update.

Expressを使ってローカルでのAPIテスト環境をサクッと作るための備忘録

Last updated at Posted at 2017-12-12

JSONを返してくれるだけのREST APIを想定して何か作る時によくやるので、備忘録程度に書いておきます。
(「サクッと」には個人差・routing設定の複雑さによって誤差が生じます。ご了承ください。)

こんな人ならさくっと書きやすい

  • JSはわかるけど、APIの設定とかルーティングとかはRailsのをみたことあるなーくらいの人
  • Node.jsを知っている人

Expressとは

Express
Node.js上で動作するフレームワークです。
HTTPサーバーとして使ったりAPIのルーティング設定したりなど、使われる用途は幅広(印象)です。

API仕様

## END_POINT
http://localhost:4000/api/v1

## GET: /members
全メンバーデータを取得

## GET: /members/:id
idに対応したメンバーを取得

ディレクトリ作成+npm init

まずは

mkdir api-test
cd api-test
yarn init

Enter押しまくり(-yとかで全部yesでできたかも)

npm modulesを追加

元のJSONデータから整形したものを渡す想定で、 lodashread-config を入れています。

yarn add express lodash read-config -D

index.js作成

const express = require("express")
const lodash = require("lodash")
const readConfig = require("read-config")

const router = express()

const rawData = readConfig("./data/members.json")

const END_POINT = '/api/v1'

router.use(setJSON)

// responseのcontentTypeは全部JSONでいいのでmiddlewareで設定しておく
function setJSON(req, res, next) {
  res.contentType("application/json")
  next()
}

// idに対応したメンバーを取得
router.get(`${END_POINT}/members/:id`, (req, res, next) => {
  console.log(`get id ${req.params.id} data`)
  const data = _.filter(rawData, (i, elm) => Number(elm.id) === req.params.id)
  res.send(data)
})

// 全メンバーデータを取得
router.get(`${END_POINT}/members`, (req, res, next) => {
  console.log("get all data")
  const data = rawData
  res.send(data)
})

よくやるルーティング設定の方法

URLの文字列を値として使う

ルーティングパスに :id のようにコロンをつけると、 req.params{id: 数字} が格納されます。

router.get(`${END_POINT}/members/:id`, (req, res, next) => {
  console.log(req.params) // {id: '1'}
})

GETなどのクエリパラメーターを使う

req.query に入ってます。

router.get(`${END_POINT}/members`, (req, res, next) => {
  console.log(req.query) // {name: 'taro'}
})

同階層でも、数値のときと文字列のときでルーティングを変える

req.params で設定されてる変数は、正規表現によって範囲が制限できます。

// 数字
router.get(`${END_POINT}/members/:id(//d+)`, (req, res, next) => {
  console.log(req.params) // {id: '1'}
})

// 任意の文字列
router.get(`${END_POINT}/members/:name([a-zA-Z]+[a-zA-Z0-9])`, (req, res, next) => {
  console.log(req.params) // {name: 'taro'}
})

また、ルーティングの設定は書いたものが早いほど優先される(要確認)ので、404などを表示したい場合は一番下に書くとよさそうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0