Closed14

Contentful Management APIについて調査

strtstrt

Contentfulでブログは作ったものの、WebエディタでMarkdownを書こうとすると挙動がおかしくなったりもするので、別途Contentful Management APIでエディタを準備するため調査する

strtstrt

Appearanceレベルの情報は取れなさそうなので、通常の1行テキストとSlugは区別がつかなさそう。

strtstrt

調査: 既存のEntryがどんな感じでデータを持っているかみてみる

Get all entries of a spaceのAPIをたたいて、既存のものに関して確認。

  • Symbol ※1行テキスト
    { "ja-JP": "<文字>" } という形式で保持

  • Link(Asset)
    { "ja-JP": { "sys": { "type": "Link", "linkType": "Asset", "id": "<AssetのID>" } } }
    という形式で保持

  • Date
    { "ja-JP": "<ISO 8601の拡張形式>" } という形式で保持

  • Link(他のContent Model)
    { "ja-JP": { "sys": { "type": "Link", "linkType": "Entry", "id": "<>" } }
    という形式で保持

  • Text ※複数行テキスト、Rich Textでない
    { "ja-JP": "<文字>" } という形式で保持。改行は\nになる。

strtstrt

調査: 投げてみる

上記から、以下のような感じでデータを作ってCurlで投げてみる。

{
       "fields": {
         "symboltext": {
           "ja-JP": "テスト"
         },
         "slugtext": {
           "ja-JP": "test"
         },
         "linkasset": {
          "ja-JP": {
            "sys": {
              "type": "Link",
              "linkType": "Asset",
              "id": "<id>"
             }
           }
         },
         "date": { "ja-JP": "2024-04-02T00:00+09:00" },
         "linkentry": {
          "ja-JP": {
            "sys": {
              "type": "Link",
              "linkType": "Entry",
              "id": "<id>"
             }
           }
         },
         "text": {
           "ja-JP": "文章\n文章"
        }
       },
       "metadata": {
         "tags": [
           {
             "sys": {
               "type": "Link",
               "linkType": "Tag",
               "id": "<id>"
             }
           }
         ]
       }
     }

形式的には問題なかったが、最初は以下のようなレスポンスがかえってきた。
{"sys":{"type":"Error","id":"BadRequest"},"message":"The content type you sent could not be found or was not activated.","requestId":"***"}

strtstrt

どうもheaderのX-Contentful-Content-Typeに対象のContentTypeのIDを入れなければならないようで、Get all content types of a spaceを叩いた時の結果の、itemssys内にあるidを入れたら投稿はできた。

strtstrt

APIで作った場合はdraft状態になるようで、別途公開作業する必要がある。

Publish an entry

https://www.contentful.com/developers/docs/references/content-management-api/#/reference/entries/entry-publishing

上記を使う際はentry_idを入れる必要があるが、Create an entryのレスポンスのsys内のidを使えば連続していけそう。

また、ヘッダーで指定する必要のあるX-Contentful-Versionに関しては、sys内のversion`と同じ値を設定しておけばおそらく大丈夫そう。

なお、Publishを行うだけでもversionは上がるっぽい。

strtstrt

とりあえず以下のとおりで追加してみたが、元々のテキストがまるまる消えてしまった。

[
       {
         "op": "add",
         "path": "/fields/text/ja-JP",
         "value": "文字"
       },
     ]

なので、replaceとadd、どちらも変わらなさそう・・・

strtstrt

変更を加えた場合、Entryの状態がchangedになるので、改めて公開作業を行う必要がある。

strtstrt

一旦必要最低限の分は調べ終わったので、クローズ。

このスクラップは2024/04/02にクローズされました