0
0

More than 3 years have passed since last update.

azure app service で kintone アプリデータ公開その3(REST API)

Last updated at Posted at 2020-03-02

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 が構築できそうです。

作成する 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 処理を追加します。

app.js
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 形式になります。

apiv1.js
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 も追加してみたいと思います。

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