azure app service で kintone アプリデータ公開その3です。
kintone アクセス用に、REST API を作ってみます。
概要
azure app service で kintone アプリデータ公開その2(環境変数利用)の続きです。
ブラウザ上で、kintone アプリデータをグリッド表示する場合に、kintone アプリデータを取得する方法が問題になります。
「ページ作成時、JavaScript の変数にレコード情報を入れる」、「DOM上にレコード情報を入れる」なども考えられます。
ただしページ制御なども考えるとkintone と同様に REST API でレコード取得したほうがよさそうです。
幸いにも node.js, Express では、簡単に REST API が構築できるようですので、試作してみます。
参考情報
node.js, Express だけで、REST API が構築できそうです。
- Node.jsを利用した単純なREST APIの書き方
- Node.jsとExpressでWeb APIを作ってみよう
- Node.jsのフレームワーク、Expressを使ってRESTサーバーを書いてみる
作成する REST API
とりあえず、kintone の一覧画面のようなものを作るための、複数レコードを返す REST API を作成します。
REST APIの呼び出しは、「/api/APIバージョン/機能名」のような体系が一般的のようなので、下記の名前にします。
※kintone REST API は、「/k/v1/record.json」などになっています。
- /api/v1/list
app.js の変更点
/api/v1/~ は、apiv1.js で処理することにして、app.js に apiv1Router 処理を追加します。
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
require('dotenv').config();
var indexRouter = require('./routes/index');
var apiv1Router = require('./routes/apiv1');
var usersRouter = require('./routes/users');
var customerRouter = require('./routes/customer');
var listRouter = require('./routes/list');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/api/v1', apiv1Router);
app.use('/users', usersRouter);
app.use('/customer', customerRouter);
app.use('/list', listRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
apiv1.js の追加
'/api/v1/list' の 'GET' で、呼び出されると、kintone REST API の複数レコード取得をそのまま呼び出しているだけです。
res.json(resp); で、返すと json 形式になります。
var express = require('express');
var router = express.Router();
const kintone = require('@kintone/kintone-js-sdk');
const kintoneConnection = require('./kintoneConnection');
// GET LIST
router.get('/list', function(req, res, next) {
// console.log('/list req', req);
const kintoneRecord = new kintone.Record({ connection: kintoneConnection });
kintoneRecord.getRecords(req.query).then((resp) => {
// console.log(resp);
res.json(resp);
}).catch((err) => {
// The promise function always reject with KintoneAPIExeption
console.log('kb-list-api err', err);
res.json(err);
});
});
module.exports = router;
REST API の実行
ローカルPC上で、デバッグ実行すると、ブラウザー上で直接 REST API を呼び出すことができます。
表示結果 kintone REST API の実行結果が返されています。
ただこのままでは、いろいろな kintone アプリデータが直接取得できてしまいます。
運用するには、ログイン・セッション管理などをしないといけませんね。
{"records":[{"備考":{"type":"MULTI_LINE_TEXT","value":""},"更新者":{"type":"MODIFIER","value":{"code":"Alex2013","name":"Alex2013"}},"作成者":{"type":"CREATOR","value":{"code":"Alex2013","name":"Alex2013"}},"郵便番号":{"type":"SINGLE_LINE_TEXT","value":"3300041"},"$revision":{"type":"__REVISION__","value":"1"},"部署名":{"type":"SINGLE_LINE_TEXT","value":"ソリューション営業グループ"},"担当者名":{"type":"SINGLE_LINE_TEXT","value":"森 惇"},"メールアドレス":{"type":"LINK","value":"mori_jun@example.com"},"更新日時":{"type":"UPDATED_TIME","value":"2019-07-10T12:23:00Z"},"顧客ランク":{"type":"DROP_DOWN","value":"A"},"record_no":{"type":"RECORD_NUMBER","value":"20"},"住所":{"type":"SINGLE_LINE_TEXT","value":"埼玉県浦和市××××"},"電話番号":{"type":"LINK","value":"090-××××-××××"},"FAX":{"type":"LINK","value":"050-××××-××××"},"作成日時":{"type":"CREATED_TIME","value":"2019-07-10T12:23:00Z"},"会社名":{"type":"SINGLE_LINE_TEXT","value":"林田商会"},"$id":{"type":"__ID__","value":"20"}},
...
次にやること
あとがき
REST API の作成も簡単ですね。コード量も少なくてわかりやすいと思います。
あとあと CRUD の各REST API も追加してみたいと思います。