LoginSignup
0
0

More than 1 year has passed since last update.

[Oracle Cloud] GraphQL で Oracle Content Management のデータを取得する(4)

Posted at

はじめに

この記事は、以下の記事の続きです

Oracle Content Management (以降OCM) はGraphQLをサポートし、OCM内で管理するアセットの情報を取得できます

今回、これまでの記事で紹介しきれなかった内容も含め、OCMにおけるGraphQLの利用方法をついて紹介します。記事中のUpdate!と書かれたところが、今回新たに紹介する内容になります

0. 準備

こちらの記事を参考に、OCMインスタンスを準備し、アセットを登録・公開します

1. GraphQLで公開済アセット情報を取得する

OCMにはGraphQL IDEが組み込まれており、これを利用してGraphQLの動作を確認できます。公開済アセットの情報を取得する際のURLは以下の通りです

エンドポイント

https://<OCMインスタンスのURL>/content/published/api/v1.1/graphql

GraphQL IDE

https://<OCMインスタンスのURL>/content/published/api/v1.1/graphql/explorer

GraphQL IDEのURLにアクセスすると、このような画面が表示されます。
image.jpg

汎用的に使える公開済アセット情報取得の問い合わせ

指定した公開済アセット1件の情報を取得するgetItem()

getItem()を利用し、指定した公開済アセットの情報を取得できます。問い合わせパラメータには、公開チャネルのchannelToken(チャネルトークン)とid(アセットID)もしくはslug(スラグ)を指定します。ここではチャネルトークンアセットIDを指定した例を紹介します

getItem(..)
{
  getItem(
    id:"<アセットID>",
    channelToken:"<チャネルトークン>")
  {
    id
    name
    slug
    description
  }
}

image.png

指定した条件に合致した複数の公開済アセットの情報を取得するgetItems()

getItems()を利用し、指定した条件に合致した複数の公開済アセットの情報を取得できます。問い合わせパラメータには、公開チャネルのチャネルトークンやフィルタ条件などを指定します。ここでは公開チャネルのチャネルトークンと、アセットタイプ=sampleNewsTypeのフィルタ条件を指定した例を紹介します

getItems(..)
{
  getItems(channelToken:"<チャネルトークン>",
  filter:{type:{op: EQUALS, value:"sampleNewsType"}})
  {
    totalResults
    items
    {
      id
      name
      slug
      description
    }
  }
}

image.png

アセットタイプを指定した公開済アセット情報取得の問い合わせ

OCMはアセットにアクセスするための問合せを自動的に生成します。例えば、アセットタイプ=sampleNewsTypeの公開済アセット情報を取得する場合は、getSampleNewsType(...)getSampleNewsTypeCollection(...)が作成されます。それぞれの使い方は以下の通りです

特定のアセットタイプの公開済アセット1件の情報を取得するget<アセットタイプ名>()

getSampleNewsType()を利用し、アセットタイプ=sampleNewsTypeの公開済アセットを取得できます。ここではチャネルトークンslug(スラグ) を指定した例を紹介します

getSampleNewsType(...)
{
  getSampleNewsType(
    slug: "<アセットのスラグ>",
  	channelToken:"<チャネルトークン>")
  {
    id
    name
    fields
    {
      title
      body
      image{
        id
        name
        fields{
          file
          {
            url
          }
        }
      }
    }
  }
}

image.png

特定のアセットタイプの複数アセットの情報を取得するget<アセットタイプ名>Collection() Update!

getSampleNewsTypeCollection()を利用し、アセットタイプ=sampleNewsTypeの公開済アセットを複数件取得できます。ここではチャネルトークンアセット名(name)による降順ソート(DESC) を指定した例を紹介します

getSampleNewsTypeCollection(...)
{
  getSampleNewsTypeCollection(
  	channelToken:"<チャネルトークン>",
  	sort:{name:DESC})
  {
    totalResults
    items
    {
      id
    	name
    	fields
    	{
          title
      	  body
      	  image{
      		name
      		fields{
            file{
              url
            }
      	  }
      	}
      }
    }
  }
}

image.png

2. GraphQLで未公開アセット情報を取得する Update!

OCMでは公開前のアセット(ドラフト、レビュー中などのステータスのアセット)のGraphQL問い合わせ「GraphQLコンテンツ・プレビュー」もサポートします。これを利用し、公開前の最新バージョンのアセットをプレビューする際に利用できます

GraphQLコンテンツプレビューのエンドポイント、及びGraphQL IDEのURLは以下の通りです

エンドポイント

https://<OCMインスタンスのURL>/content/preview/api/v1.1/graphql

GraphQL IDE

https://<OCMインスタンスのURL>/content/preview/api/v1.1/graphql/explorer

image.png

公開済アセットを取得する際の /content/published/content/preview に変更されます

GraphQLコンテンツプレビューをIDEで確認する

コンテンツアイテムを1件新規作成し、公開チャネルに割り当てます。ここではsampleNewsTypeのコンテンツアイテムsample news content 003を1件作成し、sampleChannelに割り当てます

なお、作成したコンテンツアイテムsample news content 003未公開(ドラフトステータス)のままとします
image.png

プレビュー用のGraphQL IDEをブラウザで開き、getSampleNewsTypeCollectionを実行します。前の手順で作成したドラフトステータスのコンテンツアイテムsample news content 003取得できます(公開済アセット2件+未公開アセット1件の合計3件のアセット情報を取得)

getSampleNewsTypeCollection(...)
{
  getSampleNewsTypeCollection(
  	channelToken:"<チャネルトークン>",
  	sort:{name:DESC})
  {
    totalResults
    items
    {
      id
    	name
    	fields
    	{
          title
          body
    	}
    }
  }
}

image.png

公開済アセットを取得するGraphQL IDEを開き、同じ条件でgetSampleNewsTypeCollectionを実行します。今回はドラフトステータスのコンテンツアイテムsample news content 003取得されません(公開済アセットの2件のみ取得)
image.png

3. おわりに

この記事ではOCMのGraphQLの利用方法について紹介しました。「GraphQLコンテンツ・プレビュー」を利用することで、公開前のアセット情報もGraphQLで取得することができます。検証環境などで公開前のアセットをプレビューする場合などでの利用が想定されますので、機会がありましたら是非ご活用ください

4. 関連リソース

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0