2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ケバブケースを使うならケバブケースに従わないと痛い目を見る

Last updated at Posted at 2022-03-08

設定

API仕様書からNode.jsのServer stubの生成

API仕様書の一部抜粋

 '/groups/{groupid}/users/{userid}':
    put:
      tags:
        - groupUser
      operationId: put-groups-groupId-users-userId
      parameters:
        - name: groupId
          in: path
          schema:
            type: string
            default: sampleGroupId
        - name: userId
          in: path
          schema:
            type: string
            default: sampleUserId
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupUser'
      x-swagger-router-controller: GroupUser

生成されたNode.jsのstub

上記のyamlファイルからは以下のようなcontrollerが生成される。
関数名はoperationIdをキャメルケースに変換した名前になる。

module.exports.putGroupsGroupIdUsersUserId = function putGroupsGroupIdUsersUserId (req, res, next, groupId, userId) {
  GroupUser.putGroupsGroupIdUsersUserId(groupId, userId)
    .then(function (response) {
      utils.writeJson(res, response);
    })
    .catch(function (response) {
      utils.writeJson(res, response);
    });
};

ルーティングも生成される。
ルーティングは以下のように、bug-hunters/oas3-toolsによって、API仕様書を用いて行うことができる。

'use strict';

var path = require('path');
var http = require('http');

var oas3Tools = require('oas3-tools');
var serverPort = 8080;

// swaggerRouter configuration
var options = {
    routing: {
        controllers: path.join(__dirname, './controllers')
    },
};

var expressAppConfig = oas3Tools.expressAppConfig(path.join(__dirname, 'api/openapi.yaml'), options);
var app = expressAppConfig.getApp();

// Initialize the Swagger middleware
http.createServer(app).listen(serverPort, function () {
    console.log('Your server is listening on port %d (http://localhost:%d)', serverPort, serverPort);
    console.log('Swagger-ui is available on http://localhost:%d/docs', serverPort);
});

問題

しかし、/groups/{groupid}/users/{userid}へのリクエストが処理されない

原因

ルーティングはbug-hunters/oas3-toolsを用いて行われる。
oas3-toolsは、API仕様書を読み込み、operationIdをキャメルケースに変換して、ルーティングする。
operationId: put-groups-groupId-users-userIdなので、キャメルケースに変換すると、putGroupsGroupidUsersUseridになる
しかし、関数名はputGroupsGroupIdUsersUserIdである。

解決

operationId: put-groups-groupId-users-userIdではなく、正しいケバブケースである、operationId: put-groups-groupid-users-useridにするべきだった。

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?