1. ヘルプ
  2. 機能
  3. インポート / エクスポート

コンテンツ(記事)の本文を入稿したいです。どのようにAPIを設定すればよいですか?

→ コンテンツ(記事)の本文を入稿するには、リッチエディタを利用します。複雑なデータの場合は、繰り返しフィールドを使ってその他のフィールドを併用することもできます。

本文データの持ち方には、さまざまな方法が考えられますが、主に以下の2種類の方法が用いられることが多いです。

1. リッチエディタを使う

APIスキーマのリッチエディタを利用する方法です。

microCMSのリッチエディタは、いわゆるWYSIWYGエディタです。一般的な記事であれば、リッチエディタのみで本文を表現できるケースも多くあります。

リッチエディタの使い方については「リッチエディタの操作方法」をご覧ください。

2. 繰り返しフィールドを利用し、リッチエディタとその他のフィールドを併用する

繰り返しフィールドを利用してリッチエディタと他のフィールドを組み合わせると、リッチエディタのみでは表現できない本文の内容を入稿できます。

例えば、テキストエリアと組み合わせると、特殊なHTMLの記述をそのまま入稿することも可能です。

設定手順(管理画面)

API設定方法の一例として、リッチエディタとテキストエリアを持つ繰り返しフィールドを設定する手順をご紹介します。

1. 管理画面の任意のAPIから[カスタムフィールド]をクリックする

2. [追加する]ボタンをクリックする

3. 「カスタムフィールド名」と「カスタムフィールドID」を入力し、[次へ]をクリックする

まず、リッチエディタ用のカスタムフィールドを作成します。

4. APIスキーマ(インターフェース)を定義する

リッチエディタ用のフィールドを1つ設定します。

以下のようにAPIスキーマを設定します。

フィールドID 表示名 種類
rich リッチテキスト リッチエディタ

5. 同様に、テキストエリア用のカスタムフィールドも作成します(3〜4と同様)

6. [API設定]をクリックし、「API設定画面」で[APIスキーマ]クリックする

7. [フィールドを追加]をクリックし、繰り返しフィールドを指定する

ここで、記事本文用のフィールドとして、繰り返しフィールドを指定します。その際に先ほど作成した2つのカスタムフィールドを利用するよう設定します。

8. [決定]をクリックした後、[変更する]をクリックして保存する

入稿方法(管理画面)

入稿する際は、コンテンツの新規作成画面で[フィールドを追加]をクリックすると、カスタムフィールドの選択画面が表示されます。

ここで、先ほど設定した2つのカスタムフィールドから、どちらのフィールドを利用するかを選択できます。

内容に応じて、カスタムフィールドを使い分けながら入稿していきます。

リッチエディタとその他のフィールドを組み合わせて本文を入稿する方法について、以下のブログでも具体的な方法をご紹介しています。ぜひ併せてご覧ください。

microCMSの繰り返しフィールドを利用して対談風のデザインを作る | microCMSブログ

実装方法

繰り返しフィールドを利用した場合のAPIレスポンスは、次のようになります(body部分)。

{
  "id": "1ot241e5b",
  "createdAt": "2020-12-17T08:14:19.813Z",
  "updatedAt": "2020-12-17T08:15:57.703Z",
  "publishedAt": "2020-12-17T08:14:19.813Z",
  "revisedAt": "2020-12-17T08:15:57.703Z",
  "title": "一つ目の記事",
  "body": [
    {
    "fieldId": "rich",
      "richText": "<h1 id=\"h00bd8f82dd\">タイトル</h1><p>こちらに記事内容を記述</p>"
    },
    {
      "fieldId": "html",
      "html": "<table><tr><td>テスト</td></tr></table>"
    }
  ]
}

レスポンスは配列として返却されます。またfieldIdというキーに対して、該当のカスタムフィールドのIDがセットされます。

表示側では、こちらのfieldIdをもとに、ロジックを書き換えることで、両方のパターンに対応することができます。

以下はReactでの実装のイメージです。

export const Main = ({ body }) => (
  <main>
    {body.map((item, i) =>
    item.fieldId === 'rich' ? (
        <Post key={i} data={item.richText} />
      ) : item.fieldId === 'html' ? (
        <HtmlBlock key={i} data={item.html} />
      ) : null
    )}
  </main>
);