TAKASHI TOYOFUKU

Strapi APIでDynamic Zoneを保存する

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...
© 2024 Takashi Toyofuku All rights reserved.