Hexabaseでアイテム更新時にWebhookを受け取る

[Hexabase](https://www.hexabase.com/)はエンタープライズ向けのBaaS（Backend as a Service）を提供しています。主な機能としてはデータベース、ファイルストレージ、認証、リアルタイム通信などを提供しています。

データベースに関連した機能として紹介したいのがWebhookです。作成時、更新時などに指定したURLに対してPOSTリクエストを行う機能になります。システム連携に使えるでしょう。

今回はそのWebhookの使い方を解説します。

## 開発者機能を有効にしてください

Webhookを使う場合には、Hexabaseの個人設定で `開発者向け機能` を有効にします。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/02e868fa-a23f-011c-50df-9d8f49eed241.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/02e868fa-a23f-011c-50df-9d8f49eed241.png)

## Webhookを開く

データの詳細を開き、メニューの設定を開きます。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/86757de6-b797-33d0-24c3-57bd67079840.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/86757de6-b797-33d0-24c3-57bd67079840.png)

その中にWebhookという項目があります。そして、Webhookを追加するボタンを押して、Webhookを受け取るURLを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/ee4e1cb5-2ea3-b273-e39c-907e7bc4bcf7.png)


## Webhookの仕組み

データを更新したりすると、指定したURLに対してPOSTリクエストが実行されます。GETではないので注意してください。

リクエストは `Content-Type: application/json` で、ボディは以下のようなデータになります。

```json
{
	"data": {
		"u_id": "62bac0fd2c87b9c2bf23a313",
		"user_name": "goofmint",
		"email": "user@example.com",
		"updated_by": "goofmint",
		"updated_at": "2023/01/28 03:07:07",
		"created_by": "demo",
		"created_at": "2022/11/09 05:54:34",
		"p_id": "636affb311092f02affd3adc",
		"d_id": "636affd3a011d2ae2bbfe1af",
		"d_disp_id": "Memo",
		"i_id": "636b409aff578b5690a6ebf2",
		"title": "",
		"status_id": "636affd3f9600ccdf8842fa8",
		"statuses": {
			"636affd3f9600ccdf8842fa7": {
				"color": "",
				"name": "ステータス２",
				"order": 1,
				"s_id": "636affd3f9600ccdf8842fa7",
				"status_id": "Status2"
			},
			:
		},
		"history_id": "63d4915b79c48dc6622cea96",
		"trans_id": "63d4915b79c48dc6622cea8f",
		"fields_data": {
			"Title": {
				"f_id": "636affd3f9600ccdf8842fa3",
				"display_id": "Title",
				"value": "テストの編集",
				"uncommitted_value": "テストの編集",
				"field_name": "タイトル",
				"data_type": "text"
			},
			:
			"photo": {
				"f_id": "636b010511092f02affd3af4",
				"display_id": "photo",
				"value": [
					{
						"_id": "636b409bf9600ccdf8845c9f",
						"file_id": "636b409bf9600ccdf8845c9f",
						"display_order": 0,
						"d_id": "636affd3a011d2ae2bbfe1af",
						"datastore_id": "636affd3a011d2ae2bbfe1af",
						"w_id": "62bac0f0a65b33ec0c212a67",
						"p_id": "636affb311092f02affd3adc",
						"i_id": "636b409aff578b5690a6ebf2",
						"temporary": true,
						"deleted": false,
						"filename": "test (4).png",
						"filepath": "AfWf1291RQKA17kmSnkDpCxnlKrjyXGKbvcDOf3yLHXPdtF8cHT1B3VbdM920lO9NNLloQchh74d98fb5YaswULdGTfG5baGy1VVOvmzXvbFgKUboYmjymFlkyvzMGABRjbS4Jw0dFvQrsjmuu0xvK4Mq88KGXF9DteUEGDFhuJKPAm8wy5kd8oRscjAH5srZRxJ3j241IVOgCvOLBP0ztVgFeDx0Sm8qk12nU4ulhBskrUgZPdo9OJSKdOr7zQ",
						"item_id": "636b409aff578b5690a6ebf2",
						"contentType": "image/png",
						"selfLink": "linkerprodstorage/AfWf1291RQKA17kmSnkDpCxnlKrjyXGKbvcDOf3yLHXPdtF8cHT1B3VbdM920lO9NNLloQchh74d98fb5YaswULdGTfG5baGy1VVOvmzXvbFgKUboYmjymFlkyvzMGABRjbS4Jw0dFvQrsjmuu0xvK4Mq88KGXF9DteUEGDFhuJKPAm8wy5kd8oRscjAH5srZRxJ3j241IVOgCvOLBP0ztVgFeDx0Sm8qk12nU4ulhBskrUgZPdo9OJSKdOr7zQ",
						"mediaLink": "/storage/linkerprodstorage/AfWf1291RQKA17kmSnkDpCxnlKrjyXGKbvcDOf3yLHXPdtF8cHT1B3VbdM920lO9NNLloQchh74d98fb5YaswULdGTfG5baGy1VVOvmzXvbFgKUboYmjymFlkyvzMGABRjbS4Jw0dFvQrsjmuu0xvK4Mq88KGXF9DteUEGDFhuJKPAm8wy5kd8oRscjAH5srZRxJ3j241IVOgCvOLBP0ztVgFeDx0Sm8qk12nU4ulhBskrUgZPdo9OJSKdOr7zQ",
						"size": 2300,
						"field_id": "photo",
						"created_at": "2022-11-09T05:54:35.801Z",
						"name": "test (4).png",
						"timeCreated": "2022-11-09T05:54:35.801Z",
						"updated": "2022-11-09T05:54:35.799Z",
						"user_id": "6350e1788d7ca2807f7be102"
					},
					
				],
				"field_name": "写真",
				"data_type": "file"
			}
		},
		"field_changes": [
			{
				"f_id": "636affd3f9600ccdf8842fa3",
				"field_name": "タイトル",
				"field_datatype": "text",
				"old_val": null,
				"new_val": "テストの編集",
				"logged_at": "2023/01/28 03:07:07"
			}
		],
		"releated_databases": [],
		"status_actions": {
			"ステータス２ヘ進める": {
				"_id": "636affd3f9600ccdf8842fac",
				"a_id": "636affd3f9600ccdf8842fac",
				"access_keys": [
					"636affb3f9600ccdf8842f94",
					"636affb3f9600ccdf8842f96"
				],
				"created_at": "2022-11-09T01:18:11.441Z",
				"d_id": "636affd3a011d2ae2bbfe1af",
				"description": "",
				"display_id": "MoveToStatus2",
				"display_order": 0,
				"is_status_action": true,
				"name": "ステータス２ヘ進める",
				"operation": "2",
				"p_id": "636affb311092f02affd3adc",
				"set_status": "636affd3f9600ccdf8842fa7",
				"slack_channels": null,
				"status_id": "636affd3f9600ccdf8842fa8",
				"updated_at": "2022-11-09T01:18:11.441Z",
				"user_slack_channels": null,
				"w_id": "62bac0f0a65b33ec0c212a67"
			}
		},
		"db_actions": {
			"このデータを削除する": {
				"_id": "636affd3f9600ccdf8842fb1",
				"a_id": "636affd3f9600ccdf8842fb1",
				"access_keys": [
					"636affb3f9600ccdf8842f94",
					"636affb3f9600ccdf8842f96"
				],
				"created_at": "2022-11-09T01:18:11.59Z",
				"d_id": "636affd3a011d2ae2bbfe1af",
				"description": "",
				"display_id": "DeleteItem",
				"display_order": 0,
				"isOwnedBySystem": true,
				"is_status_action": false,
				"name": "このデータを削除する",
				"operation": "3",
				"p_id": "636affb311092f02affd3adc",
				"set_status": "",
				"slack_channels": null,
				"updated_at": "2022-11-09T01:18:11.59Z",
				"user_slack_channels": null,
				"w_id": "62bac0f0a65b33ec0c212a67"
			},
			"コピーして新規登録する": {
				:
			},
			:
		}
	},
	"env_vars": {
		:
	}
}
```

これらのデータを使って自社システムなどと連携できます。

## まとめ

同様の機能として[アクションスクリプト](https://qiita.com/goofmint/items/22dbedbd86210a307b2f)があります。こちらはコードをHexabaseサーバー上に保存して、サーバーレスで実行できる機能です。言語はNode.js限定になります。

アクションスクリプトとWebhookのどちらが良いかは業務要件によって異なるでしょう。アクションスクリプトはあまり長い処理には不向きなので、短時間で終われるものがお勧めです。

サーバーレスな業務システム開発を実現するために、Hexabaseをご利用ください。

[株式会社 Hexabaseー法人向けクラウドシステム『Hexabase』ー](https://www.hexabase.com/)