Custom Object APIs
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

GraphQL を使用したオブジェクトエントリの管理

GraphQL を使用すると、Liferay 内のカスタム オブジェクト エントリを効率的に管理できます。 この API フレームワークはデータのやり取りを簡素化し、 REST APIの代替として機能します。 GraphQL を使用すると、特定のデータのクエリ、ネットワーク リクエストの削減、アプリケーションのパフォーマンスの向上が可能になります。

Liferay での GraphQL の詳細については、 GraphQL API の使用 をお読みください。

Liferayインスタンスのセットアップ

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132

http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。

次に、次の手順に従って、このチュートリアルの基本オブジェクトを 作成 します。

  1. グローバル メニュー (Global Menu) を開き、 コントロール パネル タブに移動して、 オブジェクトをクリックします。

  2. 追加 (Add Button) をクリックし、次の値を入力します。

    項目
    ラベルEvent Announcement
    複数形のラベルEvent Announcements
    名前EventAnnouncement
  3. 新しい オブジェクト 下書きを選択し、 詳細 タブに移動して、 ユーザーがエントリを下書きとして保存できるようにする および エントリの翻訳を有効にする オプションをオンに切り替えます。 [保存]をクリックします。

  4. フィールド タブに移動し、2 つのテキスト フィールドを追加します。

    ラベル項目名種類必須
    タイトルtitleテキストボックス
    説明説明テキストボックス
  5. 詳細 タブに戻り、スコープ → パネル リンクで オブジェクト を選択し、 公開をクリックします。

    オブジェクト定義は、グローバル メニューの [オブジェクト] の下に表示されます。 アプリケーションを使用して、エントリが正しく作成されているかどうかを確認できます。

    重要

    このチュートリアルでは、上記の値を使用します。

オブジェクトを公開する と、データを受信して保存するための新しいアプリケーションが作成され、アクティブ化されます。 ヘッドレス API 経由でアクセスできるようになりました。 カスタム オブジェクトのすべての API は、Liferay の GraphQL スキーマの c の下に表示されます。

Liferay に統合された GraphiQL IDE を使用して、オブジェクト スキーマの検索、クエリの下書き、リクエストの実行などを行うことができます。 アクセスするには、[server]:[port]/o/api (例: localhost:8080/o/api) にある LiferayのAPIエクスプローラーにアクセスし、GraphQLをクリックします。

カスタムオブジェクトエントリの投稿

create ミューテーションを使用して、カスタム オブジェクト エントリを投稿します。 この例では、Event Announcement オブジェクトに、 titledescriptionの 2 つのフィールドを持つ新しいエントリを追加します。

  1. Liferay に統合された GraphiQL IDE にアクセスしてリクエストを作成します。

    Liferay に統合された GraphiQL IDE を使用して、クエリを管理し、応答を表示します。

  2. スキーマドキュメント (1) に基づいて GraphQL クエリを構築し、GraphQL クライアントのウィンドウの左上にあるクエリ領域 (2) に配置します。

    mutation {
       c {
          createEventAnnouncement(
             EventAnnouncement: {
                title: "Green Tech Initiative",
                description: "A series of workshops and discussions on sustainable tech practices. Focus on energy-efficient coding, reducing data center carbon footprints, and eco-friendly solutions.",
             }
          ) {
          id
          }
       }
    }
    

    あるいは、公開したいエントリを含む JSON ドキュメントを作成し、それを左下にあるクエリ変数ボックス (5) に配置することもできます (ボックスを展開するには、下にスクロールして クエリ変数 をクリックする必要がある場合があります)。

    {
       "eventAnnouncement": {
          "title": "Green Tech Initiative",
          "description": "A series of workshops and discussions on sustainable tech practices. Focus on energy-efficient coding, reducing data center carbon footprints, and eco-friendly solutions."
       }
    }
    

    eventAnnouncement 変数を使用して、動的なデータを GraphQL ミューテーションに渡します。 この方法により、クエリ構造をそれが操作するデータから分離することができ、異なる入力を持つクエリの再利用が容易になります。

    mutation CreateEvent($eventAnnouncement: InputC_EventAnnouncement) {
       c {
          createEventAnnouncement(EventAnnouncement: $eventAnnouncement) {
             id
          }
       }
    }
    
  3. 上部の再生ボタン (3) をクリックしてクエリを実行します。

追加したオブジェクト エントリが GraphQL クライアントの右側のペイン (4) に表示されます。 Liferay は、ミューテーションで要求したフィールドとエントリの ID を含むオブジェクト エントリの JSON 表現を返します。

{
  "data": {
    "c": {
      "createEventAnnouncement": {
        "id": 32802
      }
    }
  }
}

これらのリクエストは、cURL などの任意の Web クライアントで行うことができます。

curl \
	"http://localhost:8080/o/graphql" \
	--data-raw '{
		"query": "mutation { c { createEventAnnouncement(EventAnnouncement: {title: \"Green Tech Initiative\", description: \"A series of workshops and discussions on sustainable tech practices. Focus on energy-efficient coding, reducing data center carbon footprints, and eco-friendly solutions.\"}) { id } } }"
	}' \
	--header "Accept: application/json" \
	--header "Content-Type: application/json" \
	--request "POST" \
	--user "test@liferay.com:learn"
重要

開発中は、URLで資格情報データを渡す基本認証を使用する方がはるかに簡単です。 これは安全ではないため、本番環境ではこの方法を使用しないでください。

下書きステータスのエントリを投稿する

Liferay DXP 2024.Q3+/ポータル GA125+

ステータスを設定しながらオブジェクトエントリを投稿することもできます。 この例では、 イベントアナウンスメント オブジェクトにドラフトステータスの新しいエントリを追加する方法を示します。

  1. スキーマ ドキュメントに基づいて GraphQL クエリを作成し、GraphQL クライアントのウィンドウの左上にあるクエリ領域に配置します。
mutation {
   c {
      createEventAnnouncement(
         EventAnnouncement: {
            title: "Tech Summit 2024",
            description: "An annual gathering of technology enthusiasts to explore the latest trends in AI, cybersecurity, and software development.",
            statusCode: 2
         }
      ) {
         id
         status
         statusCode
      }
   }
}

この GraphQL ミューテーションでは、 createEventAnnouncement を呼び出して、Event Announcement オブジェクト定義に新しいエントリを追加します。 変異リクエストは、titledescriptionstatusCode フィールドを持つEventAnnouncementオブジェクトを含む。 statusCode フィールドは 2に設定されており、エントリがドラフト状態であることを示します (承認済みのエントリには 0 が使用されます)。

レスポンスは、新しく作成されたイベントアナウンスの idstatus、および statusCode を返します。これは、オブジェクトが作成され、現在ドラフト状態であることを確認します。

{
   "data": {
      "c": {
         "createEventAnnouncement": {
         "id": 32897,
         "status": "draft",
         "statusCode": 2
         }
      }
   }
}

イベントアナウンスメントアプリケーションにアクセスして、エントリが下書きとして正常に作成されたかどうかを確認できます。

イベントアナウンスメントアプリケーションにアクセスして、エントリが正常に作成されたことを確認します。

カスタムオブジェクトエントリの取得

GraphQL クライアントの左上のウィンドウに、すべてのイベントアナウンスエントリを取得する次のコードを配置します。

query {
   c {
      eventAnnouncements(
         filter: ""
         page: 1
         pageSize: 10
         search: ""
         sort: ""
      ) {
         page
         items {
         id
         title
         description
         status
         }
      }
   }
}

この GraphQL クエリは、ページ区切りパラメータを使用してイベントアナウンスのリストを取得します。 結果の最初のページを要求します。ページあたり最大 10 項目が表示されます。 応答には、各イベントアナウンスの IDタイトル説明、および ステータス が含まれます。 フィルター、検索、並べ替えのフィールドを変更して、特定の条件に基づいて結果を絞り込むことができます。

再生ボタンをクリックして実行し、利用可能なエントリを確認します。

{
   "data": {
      "c": {
         "eventAnnouncements": {
         "page": 1,
         "items": [
            {
               "id": 32897,
               "title": "Tech Summit 2024",
               "description": "An annual gathering of technology enthusiasts to explore the latest trends in AI, cybersecurity, and software development.",
               "status": "draft"
            },
            {
               "id": 32899,
               "title": "Green Tech Initiative",
               "description": "A series of workshops and discussions on sustainable tech practices. Focus on energy-efficient coding, reducing data center carbon footprints, and eco-friendly solutions.",
               "status": "approved"
            }
         ]
         }
      }
   }
}

単一のカスタムオブジェクトエントリの取得

単一のエントリを取得するには、エントリの ID を使用します。

query {
   c {
      eventAnnouncement(eventAnnouncementId: 32897) {
         title
         description
      	status
      	statusCode
      }
   }
}

これをクライアントのウィンドウの左上にあるクエリ領域に貼り付けて、 再生 ボタンをクリックします。 選択されたエントリを返します。

{
  "data": {
    "c": {
      "eventAnnouncement": {
        "title": "Tech Summit 2024",
        "description": "An annual gathering of technology enthusiasts to explore the latest trends in AI, cybersecurity, and software development.",
        "status": "draft",
        "statusCode": 2
      }
    }
  }
}

ローカライズされたコンテンツの入手

Liferay DXP 2024.Q3+/ポータル GA125+

ローカライズされたコンテンツがある場合は、GraphQL クエリで _i18n パラメータを使用して取得できます。

GraphQL クライアントで、特定のエントリのローカライズされたコンテンツを取得するには、次のクエリを入力します。

query {
   c {
      eventAnnouncement(eventAnnouncementId: 32899) {
         title_i18n
         description_i18n
      }
   }
}

このクエリは、ID で指定されたイベントアナウンスのローカライズされた タイトル および 説明 フィールドを取得します。

クエリを実行するには、 再生 ボタンをクリックします。 応答には、使用可能なローカライズされた値が表示されます。

{
   "data": {
      "c": {
         "eventAnnouncement": {
         "title_i18n": {
            "en_US": "Community Volunteer Day",
            "es_ES": "Día de Voluntariado Comunitario",
            "pt_BR": "Dia de Voluntariado Comunitário",
            "fr_FR": "Journée de Volontariat Communautaire"
         },
         "description_i18n": {
            "en_US": "An opportunity for community members to come together and volunteer for various local projects and initiatives.",
            "es_ES": "Una oportunidad para que los miembros de la comunidad se reúnan y colaboren en diversos proyectos e iniciativas locales.",
            "pt_BR": "Uma oportunidade para os membros da comunidade se reunirem e voluntariar para vários projetos e iniciativas locais.",
            "fr_FR": "Une occasion pour les membres de la communauté de se rassembler et de faire du bénévolat pour divers projets et initiatives locaux."
         }
         }
      }
   }
}

カスタムオブジェクトエントリのパッチ適用

エントリ内のフィールドを更新するには、GraphQL クエリで update ミューテーションを使用します。

イベントアナウンスエントリを ID で更新するには、GraphQL クライアントのクエリ領域に次のミューテーションを入力します。

mutation {
   c {
      updateEventAnnouncement(
         eventAnnouncementId: 32897,
         EventAnnouncement: {
         title: "Tech Summit 2025",
         description: "A series of workshops on sustainable tech practices. Focus on energy-efficient coding, reducing data center carbon footprints, and eco-friendly solutions."
         statusCode: 0
         }
      ) {
         id
         title
         description
      }
   }
}

このミューテーションは、指定された ID を持つエントリの titledescription、および statusCode フィールドを更新します。

再生 ボタンをクリックして実行すると、応答に更新されたフィールドが含まれます。

{
   "data": {
      "c": {
         "updateEventAnnouncement": {
         "id": 32897,
         "title": "Tech Summit 2025",
         "description": "A series of workshops on sustainable tech practices. Focus on energy-efficient coding, reducing data center carbon footprints, and eco-friendly solutions.",
         "status": "approved",
         "statusCode": 0
         }
      }
   }
}

カスタムオブジェクトエントリの削除

エントリを削除するには、 delete ミューテーションを使用します。 この呼び出しは、単一のエントリを取得する場合と似ています。

mutation {
   c {
      deleteEventAnnouncement(eventAnnouncementId: 32897)
   }
}

このミューテーションは、成功または失敗を示すブール値を JSON ドキュメントで返します。

{
   "data": {
      "c": {
         "deleteEventAnnouncement": true // null if the deletion fails
      }
   }
}

  これで、Liferay の GraphQL サービスを使用してカスタム オブジェクト エントリを処理する方法を学習しました。