プリザンターのシステム間データ連携パターンのまとめ

本記事は、[OSSのノーコード・ローコード開発ツール「プリザンター」 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/pleasanter) の1日目の記事です。

# 概要
オープンソースのノーコード・ローコード開発ツール「[プリザンター](https://pleasanter.org)」のシステム間データ連携について、いくつかのパターンがあるのでまとめてみました。

# お品書き
1. [他システムのAPIをブラウザ上のスクリプトで操作](#他システムのapiをブラウザ上のスクリプトで操作)
1. [他システムのAPIをサーバスクリプトで操作](#他システムのapiをサーバスクリプトで操作)
1. [プリザンターのAPIをブラウザ上のスクリプトで操作](#プリザンターのapiをブラウザ上のスクリプトで操作)
1. [プリザンターのAPIをサーバサイドで操作](#プリザンターのapiをサーバサイドで操作)
1. [プリザンターのAPIをバッチで操作](#プリザンターのapiをバッチで操作)
1. [プリザンターのDBを直接操作](#プリザンターのdbを直接操作)
1. [プリザンターに新しいAPIを追加](#プリザンターに新しいapiを追加)

# 内容
## 他システムのAPIをブラウザ上のスクリプトで操作
プリザンターの [スクリプト](https://pleasanter.org/manual?category=2200) 機能を使用すると、ブラウザ上で管理者が設定した任意のJavaScriptを実行し、他システムのAPIを呼び出すことができます。用途としてはプリザンターの画面に必要となる外部のデータを取得したり、プリザンターの画面にあるデータを外部アプリケーションに送るなどが挙げられます。注意事項としては他システムのAPIキーをブラウザに出力する必要がある点、他システムのCORSの設定が必要となる点です。
```mermaid
sequenceDiagram
  actor U as Web Blowser
  participant P as Pleasanter
  participant H as Other Web API
  U->>+P: HTTP
  P-->>-U: HTML/JavaScript
  U->>+H: HTTP
  H-->>-U: API Response
```

## 他システムのAPIをサーバスクリプトで操作
プリザンターの [サーバスクリプト](https://pleasanter.org/manual?category=2250) を使用するとサーバサイドに記述したJavaScriptと [HTTP Client](https://pleasanter.org/manual/server-script-http-client) によって他システムのAPIを呼び出すことができます。ブラウザ上のスクリプトと異なりAPIキーをサーバ側に隠蔽できる点やCORS設定が不要となる点がメリットです。具体例としては [「Redmineとプリザンターを連携してみた」](https://qiita.com/implem-taguchi/items/4c7c6331bb7e85001459) という記事があります。 注意事項としてはサーバサイドのリソースが消費されるため負荷の高い処理を実装すると、システム全体に影響を及ぼす可能性があります。
```mermaid
sequenceDiagram
  actor U as Web Blowser
  participant P as Pleasanter
  participant S as Pleasanter<br/>Server Script
  participant H as Other Web API
  U->>+P: HTTP
  P->>+S: 
  S->>+H: HTTP
  H-->>-S: API Response
  S-->>-P: 
  P-->>-U: HTML
```

## プリザンターのAPIをブラウザ上のスクリプトで操作
他システムのHTML上のJavaScriptを使用して、プリザンターの [API](https://pleasanter.org/manual?category=2100) を呼び出すことができます。用途としてはプリザンターから任意のデータを取得したり、プリザンターに必要なデータを書き込んだりすることができます。プリザンターのAPIキーをJavaScript上に記述する必要があるためAPIを実行するユーザには最低限の権限を付与しておくことをお勧めします。この構成で非公開情報にREAD権限を付与することはお勧めしません。書き込み専用として使用するなどの用途に留めることをお勧めします。この構成を行うにはプリザンターのパラメータ [Security.json の AccessControlAllowOrigin](https://pleasanter.org/manual/security-json) を設定する必要があります。
```mermaid
sequenceDiagram
  actor U as Web Blowser
  participant H as Other Web Application
  participant P as Pleasanter API
  U->>+H: HTTP
  H-->>-U: HTML/JavaScript
  U->>+P: HTTP
  P-->>-U: API Response
```

## プリザンターのAPIをサーバサイドで操作
JavaやPHPなどのWebアプリケーションのバックエンドでプリザンターの [API](https://pleasanter.org/manual?category=2100) を呼び出すパターンです。APIキーがクライアントのブラウザに出力されないためセキュアなシステムを実現することができます。企業の問い合わせ窓口やアンケートの収集などの用途が考えられます。
```mermaid
sequenceDiagram
  actor U as Web Blowser
  participant H as Other Web Application
  participant P as Pleasanter API
  U->>+H: HTTP
  H->>+P: HTTP
  P-->>-H: API Response
  H-->>-U: HTML
```

## プリザンターのAPIをバッチで操作
定期的にCSVを取り込むといったバッチ処理とプリザンターの [API](https://pleasanter.org/manual?category=2100) を組み合わせた連携です。プリザンターの公開された [API](https://pleasanter.org/manual?category=2100) を操作するため、比較的簡単にバッチ処理を実現することができます。注意事項としては10万件を超えるような大量データを入出力する場合には、システムに負荷がかかる点や処理に時間がかかる可能性がある点です。
```mermaid
sequenceDiagram
  participant H as Batch Application
  participant P as Pleasanter API
  H->>+P: HTTP
  P-->>-H: API Response
```

## プリザンターのDBを直接操作
大量データの入出力を短時間に行うためには、プリザンターを使用せずデータベースに直接アクセスして高速にデータを入出力することができます。注意事項としてはデータ登録時の検索インデックスが登録されない点や、操作によってはDBの不整合が起きる可能性がある点です。
```mermaid
sequenceDiagram
  participant H as Batch Application
  participant P as RDBMS
  H->>+P: SQL
  P-->>-H: SQL Response
```

## プリザンターに新しいAPIを追加
プリザンターにはSQLと組み合わせて [新しいAPIを追加する機能](https://pleasanter.org/manual/extended-sql-api) があります。これを作成することにより、目的の処理を高速に実行するAPIを追加することができます。
```mermaid
sequenceDiagram
  participant B as Other Application
  participant A as Pleasanter API
  participant H as Pleasanter
  participant P as RDBMS
  B->>+A: HTTP
  A->>+H: 
  H->>+P: SQL
  P-->>-H: SQL Response
  H-->>-A: 
  A-->>-B: API Response
```

## おわりに
プリザンターは今後も業務に役立つノーコード・ローコード開発ツールとして進化を続けてまいります。応援よろしくお願いします。皆さん良いクリスマスをお過ごしください。
https://pleasanter.org
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78230/1764addf-fe7a-b707-0d06-d84ad7899014.png)

:star:GitHubにスターつけてもらえたら嬉しいです。
https://github.com/Implem/Implem.Pleasanter