3.3. name-service の例
name-service は以下のエンドポイントを公開します。
-
/api/nameエンドポイントはgreeting-serviceから呼び出しを受け取ります。name-serviceが現在利用可能な場合、/api/nameエンドポイントはWorld!応答を送信し、グリーティングを完了します。ただし、name-serviceが現在利用不可の場合、/api/nameエンドポイントはName service downエラーを HTTP ステータスコード500で送信します。 -
/api/stateエンドポイントは、/api/nameエンドポイントの現在の動作を制御します。サービスが応答を送信するか、エラーメッセージを出して失敗するかを決定します。
以下のコード例は、name-service の開発方法を示しています。
'use strict';
const path = require('path');
const http = require('http');
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const probe = require('kube-probe');
const app = express();
const server = http.createServer(app);
// Adds basic health-check endpoints
probe(app);
let isOn = true;
const { update, sendMessage } = require('./lib/web-socket')(server, _ => isOn);
// Send and receive json
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// CORS support
app.use(cors());
// Name service API
app.get('/api/name', (request, response) => {
if (isOn) {
response.send('World!');
} else {
response.status(500).send('Name service down');
}
sendMessage(`${new Date()} ${isOn ? 'OK' : 'FAIL'}`);
});
// Current state of service
app.put('/api/state', (request, response) => {
isOn = request.body.state === 'ok';
response.send({ state: isOn });
update();
});
app.get('/api/info',
(request, response) => response.send({ state: isOn ? 'ok' : 'fail' }));
// Expose the license.html at http[s]://[host]:[port]/licenses/licenses.html
app.use('/licenses', express.static(path.join(__dirname, 'licenses')));
module.exports = server;