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に変更します。
次に、次の手順に従って、このチュートリアルの基本オブジェクトを 作成 します。
-
グローバル メニュー (
) を開き、 コントロール パネル タブに移動して、 オブジェクトをクリックします。 -
追加 (
) をクリックし、次の値を入力します。項目 値 ラベル Event Announcement複数形のラベル Event Announcements名前 EventAnnouncement -
新しい オブジェクト 下書きを選択し、 詳細 タブに移動して、 ユーザーがエントリを下書きとして保存できるようにする および エントリの翻訳を有効にする オプションをオンに切り替えます。 [保存]をクリックします。
-
フィールド タブに移動し、2 つのテキスト フィールドを追加します。
ラベル 項目名 種類 必須 タイトル title テキストボックス ✔ 説明 説明 テキストボックス ✔ -
詳細 タブに戻り、スコープ → パネル リンクで オブジェクト を選択し、 公開をクリックします。
オブジェクト定義は、グローバル メニューの [オブジェクト] の下に表示されます。 アプリケーションを使用して、エントリが正しく作成されているかどうかを確認できます。
重要このチュートリアルでは、上記の値を使用します。
オブジェクトを公開する と、データを受信して保存するための新しいアプリケーションが作成され、アクティブ化されます。 ヘッドレス API 経由でアクセスできるようになりました。 カスタム オブジェクトのすべての API は、Liferay の GraphQL スキーマの c の下に表示されます。
Liferay に統合された GraphiQL IDE を使用して、オブジェクト スキーマの検索、クエリの下書き、リクエストの実行などを行うことができます。 アクセスするには、[server]:[port]/o/api (例: localhost:8080/o/api) にある LiferayのAPIエクスプローラーにアクセスし、GraphQLをクリックします。
カスタムオブジェクトエントリの投稿
create ミューテーションを使用して、カスタム オブジェクト エントリを投稿します。 この例では、Event Announcement オブジェクトに、 title と descriptionの 2 つのフィールドを持つ新しいエントリを追加します。
-
Liferay に統合された GraphiQL IDE にアクセスしてリクエストを作成します。

-
スキーマドキュメント (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) をクリックしてクエリを実行します。
追加したオブジェクト エントリが 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+
ステータスを設定しながらオブジェクトエントリを投稿することもできます。 この例では、 イベントアナウンスメント オブジェクトにドラフトステータスの新しいエントリを追加する方法を示します。
- スキーマ ドキュメントに基づいて 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 オブジェクト定義に新しいエントリを追加します。 変異リクエストは、title、description、statusCode フィールドを持つEventAnnouncementオブジェクトを含む。 statusCode フィールドは 2に設定されており、エントリがドラフト状態であることを示します (承認済みのエントリには 0 が使用されます)。
レスポンスは、新しく作成されたイベントアナウンスの id、 status、および 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 を持つエントリの title、 description、および 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 サービスを使用してカスタム オブジェクト エントリを処理する方法を学習しました。