Synergy!データベースAPI (1.3.0)

Download OpenAPI specification:Download

はじめに

Synergy!データベースAPI は外部のシステムから、Synergy! のデータベース(マスター・履歴)の読み出し、登録・更新・削除などを簡単に行うことができる API です。
Synergy! の豊富な機能を生かしたシステム開発を簡易・短期間に行うことが可能です。

API の利用にあたって

API をご利用いただく場合、事前に Synergy! の利用登録が必要になります。
利用登録がまだお済みでない方は Synergy! 公式ページよりお問い合わせください。

また、API の利用には Synergy! データベース API 契約規定 が適用され、API を利用すると契約規定に同意したものとみなされます。

認証

管理画面上の API 管理からクライアント認証キー、クライアントシークレットの発行を行なってください。 発行時アクセス可能な IP アドレスを設定することで、指定した IP アドレス以外からのリクエストを制限することができます。 ※アクセストークン取得(auth.paas.crmstyle.com)のアクセスは、指定した IP アドレスからのリクエスト制限の対象外です。

Synergy!データベースAPI にアクセスするためには、リクエストヘッダーに発行したクライアント認証キー、クライアントシークレットを使用して取得したアクセストークンを付与する必要があります。
アクセストークンは事前に Synergy! 認可サーバ (https://auth.paas.crmstyle.com/oauth2/token) から OAuth 2.0 のクライアント・クレデンシャルズフローにより取得します。
アクセストークンには有効期限が設定されており、切れるまでアクセストークンは有効です。Synergy!データベースAPI へアクセスするたびにアクセストークンを取得しないようにしてください。
アクセストークンの取得には、IPアドレス単位で1分間あたり最大100リクエストの上限を設けていますので、その上限を超えた場合はエラーを応答します。(HTTPステータスコード:429)
上限エラーとなった場合、再度アクセストークンを取得するには1分程度時間をあけてからアクセスする必要があります。

アクセストークン取得

リクエストURL

https://auth.paas.crmstyle.com/oauth2/token

リクエストヘッダー

フィールド名 内容
Content-Type application/x-www-form-urlencoded
Authorization 管理画面上の API 管理からクライアント認証キー、クライアントシークレットの発行が可能となります。
クライアント認証キー、クライアントシークレットを:(コロン)で繋いで、base64 でエンコードした文字列を指定します。

リクエストパラメーター

プロパティ名 説明
grant_type String OAuth 2.0 の処理フローを表します。
"client_credentials" を指定してください。
audience String アクセスするAPIのドメインを表します。
"https://db.paas.crmstyle.com" を指定してください。
scope String アクセスするAPIの種別を表します。
複数指定する場合は半角スペースを scope の間に含めて指定してください。

scope一覧

scope 名 アクセス可能なAPI
db:apidefinition:design ・ApiDefinition
・OpenApi
・DatabaseDefinition
db:openapi:read ・OpenApi
db:record:execute ・Record
db:record:read ・Record.queryRecords
・Record.countRecords
・Record.getRecord
・Record.authenticate

リクエストサンプル

AUTHHEADER=`echo -n ${CLIENT_ID}:${CLIENT_SECRET} | base64 -w0`  
SCOPES="db:apidefinition:design db:openapi:read db:record:execute"
curl -i -X POST \
  -H "Authorization: Basic ${AUTHHEADER}" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  https://auth.paas.crmstyle.com/oauth2/token \
  -d "grant_type=client_credentials&scope=${SCOPES}&audience=https://db.paas.crmstyle.com"

レスポンス

レスポンスは JSON 形式で返却されます。

レスポンスサンプル
{
  "access_token": "{Access Token}",
  "expires_in": 3599,
  "scope": "db:apidefinition:design db:openapi:read db:record:execute",
  "token_type": "bearer"
}
レスポンス JSON プロパティ
プロパティ名 説明
access_token String Synergy!データベースAPI にアクセスするためのアクセストークンです。
expires_in Integer アクセストークンの有効期限が切れるまでの秒数を表します。
有効期限は1時間です。
scope String アクセストークンに含まれる scope の一覧を表します。
token_type String トークンの種別を表します。
bearer 固定です。

Synergy!データベースAPI リクエスト

リクエストの際、Authorization ヘッダーにアクセストークンをセットしてください。

listApiDefinition リクエストサンプル

curl -X GET \
  -H "accept: application/json" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  https://db.paas.crmstyle.com/apis/apidefinition.database/v1/accounts/{accountCode}/apidefinitions

oauth

Security Scheme Type OAuth2
clientCredentials OAuth Flow
Token URL: https://auth.paas.crmstyle.com/oauth2/token
Refresh URL: https://auth.paas.crmstyle.com/oauth2/token
Scopes:
  • db:apidefinition:design -

    ApiDefinition 全般実行、OpenApi 定義参照、データベース設定情報参照

  • db:openapi:read -

    OpenApi 定義参照のみ可能

  • db:record:execute -

    Record 全般実行

  • db:record:read -

    Record 参照のみ可能

bearer

Security Scheme Type HTTP
HTTP Authorization Scheme bearer

ご利用までの流れ

1. 認証情報取得

認証をご参照ください。

2. Record 定義登録

データモデルを OpenAPI V3 Schema 形式で定義し ApiDefinition.putApiDefinition から定義を登録します。
定義を登録することで Synergy! データベースに項目が作成され API に紐付けされます。Synergy! データベースに作成されている既存項目を定義登録に使用したい場合、既存項目を API に定義する を参照してください。

3. Record 利用

2で登録された API を Record より実行してください。

APIクライアントについて

作成された API は OpenAPI Specification で定義されています。 OpenApi より OpenAPI Document を取得することで、ご利用の開発言語に応じて API クライアントの自動生成が可能です。 コード生成ツールは OpenAPI.Tools をご参照ください。

リクエスト数制限

同時リクエスト数の制限には、トークンバケットモデル(アカウントごとに、レート:150/sec、バースト:300)を採用しています。
ブロック発生時は、レスポンスコード:429 Too Many Requests を返しますので、数分後に再度お試しください。

タイムアウト

データベースAPIのレスポンスは、対象データ件数、検索条件、システムの利用状況などにより時間がかかる場合があります。
通信タイムアウトの設定はご利用環境と用途に合わせて調整していただく必要がありますが、30秒以上に設定することを推奨します。

リトライ

GUIでのログイン処理や検索処理といった利用者が再実行可能な用途については混雑中をお伝えするなど、レスポンスステータスをチェックして適切な例外処理を設けてください。
API呼び出しでは通信状況など様々な要因で一時的にエラーが発生する可能性があるため、他システム連携など必要な手続きでは適切なリトライを設け処理を担保してください。
リトライの対象として、サーバーエラー(5xx)、リクエスト数制限エラー(429)、タイムアウトなどのネットワークエラーを考慮してください。
新規登録を行うリクエストでは、適切な更新キーをAPI 定義に含めることでリトライ時の重複登録を防止することが可能です。
複数回リトライを固定間隔にした場合、アクセス集中時に呼び出し間隔が収束するため、リクエスト数制限に達し易くなる傾向があります。
リクエスト数制限回避のため、リトライ間隔は固定値ではなく徐々に間隔を長くする「エクスポネンシャルバックオフ」と、可能でしたら一定の乱数を加味する「ジッター」を設け、分散させることをお勧めします。
また、最終的にAPIを実行できなかった際に、後からトレースができるようにAPI呼び出し元で適切なログを収集することをお勧めします。

改訂履歴

改訂日 更新内容
2023/12/12 アクセストークン取得時のレートリミットの説明を追加
プロパティの定義について追記
Synergy! 項目型一覧について追記
データ変換ルールを追加
2023/01/17 レコード参照のみを実行できる db:record:read スコープを追加
アクセストークンが不正である場合の説明を追記
customerDB項目作成による月額費用の変動についての注意文言を追記
2022/09/13 パスワード認証API(Record.authenticate)を追加
リソースにアクセスする権限が不足している場合の説明を追記
Record.findRecord を Record.getRecord に修正
2022/04/19 リクエスト数制限を レート:50/sec、バースト:200 から レート:150/sec、バースト:300 に変更
2022/02/24 タイムアウトおよびリトライについて追記
2022/01/12 Record.findRecord の Response Sample を修正
2021/09/14 ApiDefinition.putApiDefinition 実行時の注意事項を追記
2021/07/27 DatabaseDefinition.listDatabaseDefinition および DatabaseDefinition.getDatabaseDefinition で返却される項目の並び順を管理画面のデータベース設計で設定された表示順で返却するよう修正
2021/06/29 選択肢のプロパティに required を補完するよう変更されたため example を修正
2021/01/26 Record.createRecord, Record.patchRecord で 409 エラーが返却されることを追記
2020/12/15 リクエスト数制限を レート:10/sec、バースト:100 から レート:50/sec、バースト:200 に変更
2020/10/02 Record.queryRecords の件数上限判定について記載
2020/07/28 Filter オブジェクトの階層制限について記載
isNotNull オペレータについて追記
複数選択型およびメルマガ解除フラグリスト型が isNull, isNotNull オペレータ使用可能になることを記載
Record のエラーレスポンスについて追記
2020/06/30 サンプルコード(PHP)のリンクを追加
nullable 補完について記載
2020/06/08 オブジェクト名にパターンに関する注意事項を追記
2020/05/27 データベースごとに必要な ID 型を明記
アクセストークンの注意事項を追記
2020/05/19 初版作成

ApiDefinition

サーバ間連携用の独自の REST API を作成することができます。

listApiDefinition

登録されている API 定義の一覧を取得します。

Authorizations:
oauth (db:apidefinition:design) bearer
path Parameters
accountCode
required
string

API 管理画面に記載されたアカウントコード

query Parameters
continueToken
string

ページ送りのためのパラメーターです。
取得アイテム数が limit で指定した最大アイテム数を超過した場合に値が返却されます。 continueToken をリクエストパラメーターに指定することで limit 以降のアイテムを取得できます。

limit
integer [ 1 .. 100 ]
Default: 100

1リクエストで取得したい最大アイテム数を指定してください。
未指定の場合、100 になります。

Responses

Response samples

Content type
application/json
{
  • "metadata": {
    • "continueToken": "string"
    },
  • "items": [
    • {
      • "metadata": {
        • "kind": "ApiDefinition",
        • "name": "api1",
        • "apiVersion": "database/v1",
        • "accountCode": "xxxxx",
        • "creationTimestamp": "2019-12-05T08:08:55.261Z",
        • "uid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        • "resourceVersion": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        },
      • "spec": {
        • "resources": {
          • "main": {
            • "mapping": "_customer",
            • "type": "customerDb"
            }
          },
        • "schema": {
          • "properties": {
            • "id": {
              • "x-synergy-type": "synergyId",
              • "x-synergy-mapping": "_synergyId",
              • "type": "integer"
              },
            • "email": {
              • "x-synergy-type": "mailAddress",
              • "x-synergy-mapping": "_mailAddress",
              • "type": "string",
              • "format": "email",
              • "nullable": true
              },
            • "createdAt": {
              • "x-synergy-type": "registeredDate",
              • "x-synergy-mapping": "_registeredDate",
              • "type": "string",
              • "format": "date-time"
              },
            • "updatedAt": {
              • "x-synergy-type": "updatedDate",
              • "x-synergy-mapping": "_updatedDate",
              • "type": "string",
              • "format": "date-time"
              },
            • "name": {
              • "x-synergy-type": "text",
              • "x-synergy-mapping": "api1_name",
              • "type": "string",
              • "nullable": true
              },
            • "age": {
              • "x-synergy-type": "number",
              • "x-synergy-mapping": "api1_age",
              • "type": "number",
              • "nullable": true
              },
            • "birthday": {
              • "x-synergy-type": "date",
              • "x-synergy-mapping": "api1_birthday",
              • "type": "string",
              • "format": "date",
              • "nullable": true
              },
            • "multipleSelect": {
              • "x-synergy-type": "multipleSelect",
              • "x-synergy-mapping": "api1_multiple1",
              • "x-synergy-select-value-definitions": [
                • {
                  • "value": 1,
                  • "label": "select1",
                  • "hasExtraText": false
                  },
                • {
                  • "value": 2,
                  • "label": "select2",
                  • "hasExtraText": true
                  }
                ],
              • "type": "array",
              • "items": {
                • "type": "object",
                • "properties": {
                  • "extraText": {
                    • "type": "string",
                    • "nullable": true
                    },
                  • "value": {
                    • "type": "integer"
                    }
                  },
                • "required": [
                  • "value"
                  ]
                },
              • "nullable": true
              }
            }
          },
        • "status": {
          • "ready": {
            • "lastUpdatedTimestamp": "2020-05-12T10:05:53.658468Z",
            • "status": true,
            • "message": "api is ready."
            },
          • "databaseDefinitionSync": {
            • "lastUpdatedTimestamp": "2020-05-12T10:05:53.658468Z",
            • "status": true,
            • "message": "success."
            }
          }
        }
      }
    ]
}

putApiDefinition

API 定義を登録・更新します。

登録済みの API 定義にプロパティを追加・削除することで API 定義を更新することができます。
なお、プロパティを削除しても定義していたデータベース項目は削除されません。 ただし、選択型項目については選択肢が削除