Strapi APIでDynamic Zoneを保存する
January 23, 2025
公式ドキュメントで見つからず、探し回らないと解決できなかったのでメモ。手動オペレーション滅ぶべし!
解説すること
- Strapi で Dynamic Zone を使用している場合、どのような Body でリクエストすればよいか
- Strapi で Dynamic Zone を保存したあとの Webhook で Dynamic Zone も含むデータを流すにはどうすればいいか
背景/問題
- 業務上のコンテンツ管理に Strapi を使っている
- Strapi の Collection に Dynamic Zone を使っている
- Entry 保存時に別ツールとデータ連携するため、Webhook を発火させている
- ルールベースで特定のデータをコピペで記入するオペレーションを組んでいた
- コピペなので新たに人をいれると大抵ミスが発生する
- よって Strapi REST API を活用し自動化してミスを無くしたい
- そもそも公式ドキュメントに Example が載っていない(少なくとも見つけにくい)
- 保存できても Webhook に Dynamic Zone のデータが流れてこない
Strapi REST API で Dynamic Zone の更新を行う
Github Issues を検索し類似のケースを調べた結果、以下のような Body でリクエストすると Dynamic Zone のみ更新できる。 __component
はローカルで cms 起動している場合 types/generated/component.d.ts
を見ればわかる。
{"data": {"otherFields": "This is the value of other fields","integrations": [{"__component": "component.name","dynamicField1": "This is a value of dynamic fileds 1","dynamicField2": "This is a value of dynamic fileds 2"}]}}
Entry Update Webhook で Dynamic Zone も流す
Strapi 管理画面からの操作では Webhook に Dynamic Zone のデータが流れてくる。一方普通に REST API で更新しただけだと Webhook に Dynamic Zone などの populate が必要なデータが流れてこない。
GET と同じく populate パラメーターをつけることで解決
参考: Strapi API Webhook Trigger without population
https://example.com/api/collectionName/idValue?populate=*
Loading Tweet Button...