在Oracle Cloud中,使用GraphQL来获取Oracle内容管理的数据(第三部分)
首先
本文是以下文章的延续。
其中有些项目需要在一周内完成。
第二个
在之前的两篇文章中,我们介绍了如何通过Oracle Content Management(以下简称OCM)内置的GraphQL探索器(GraphQL IDE)获取资产信息的方法。
本次是第三篇文章,我們將介紹從客戶端應用程式獲取 OCM 資產信息的方式,而不是使用 GraphQL Explorer。
我想实现的目标
-
- OCMをHeadless CMSとして利用できるように構成します
-
- クライアント・アプリケーションを作成します。今回はApollo Clinet(React)のチュートリアルを利用します
- クライアント・アプリケーションからOCMで作成・公開したアセット(コンテンツ・アイテム)の情報をGraphQLで取得・表示するように、クライアント・アプリケーションを変更します

1. OCM – 初级版环境准备
1.1 创建实例并注册和公开资产
OCM-起動版是Oracle Cloud Always Free(免费且无时限限制)上可用的OCM功能的限定版。
根据以下文章提供的参考信息,我们将创建OCM-Starter Edition环境。
最终结果是,在资产仓库中以以下形式注册了两个资产(图像和内容项)。
内容项是从sampleNewsType这个内容类型创建的。sampleNewsType包括标题(title),主要图片(image),以及新闻正文(body)这三个数据字段(属性)。
确认2通道令牌
在这个资产库中,将设置一个名为sampleChannel的公开频道。当从React+Apollo Client引用资产时,将使用该sampleChannel的频道令牌。
您可以从OCM的UI上进行以下操作来查看频道令牌:ADMINISTRATION:内容→渠道发布→sampleChannel→右上角的侧边栏按钮→API。请记下这个频道令牌。
2. 开发客户端应用程序
我們將為使用GraphQL的OCM創建一個客戶端應用程序。這次我們將準備React和Apollo Client的環境。
我将按照Apollo Client (React)的官方教程进行实施。
2.1 前期准备
Create-React-Appを実行し、新しいプロジェクトを作成します
npx create-react-app my-app
cd my-app
npm start
[备忘录] 由于我的情况下无法执行npm start命令导致出现错误,所以在项目文件夹(这里是my-app文件夹)的根目录下创建了.env文件,并添加了SKIP_PREFLIGHT_CHECK=true,从而暂时避免了错误。
SKIP_PREFLIGHT_CHECK=true
- 必要なパッケージをインストールします
npm install @apollo/client graphql
2.2 开发React+Apollo Client应用程序
将Apollo Client集成到创建的React应用程序中。具体操作如下:按照第2步“初始化ApolloClient”以后的教程,一直实施到结束。
最后,src/index.js将成为以下代码。
import React from 'react';
import { render } from 'react-dom';
import {
ApolloClient,
InMemoryCache,
ApolloProvider,
useQuery,
gql
} from "@apollo/client";
const client = new ApolloClient({
uri: 'https://48p1r2roz4.sse.codesandbox.io',
cache: new InMemoryCache()
});
const EXCHANGE_RATES = gql`
query GetExchangeRates {
rates(currency: "USD") {
currency
rate
}
}
`;
function ExchangeRates() {
const { loading, error, data } = useQuery(EXCHANGE_RATES);
if (loading) return <p>Loading...</p>;
if (error) return <p>Error :(</p>;
return data.rates.map(({ currency, rate }) => (
<div key={currency}>
<p>
{currency}: {rate}
</p>
</div>
));
}
function App() {
return (
<div>
<h2>My first Apollo app ?</h2>
<ExchangeRates />
</div>
);
}
render(
<ApolloProvider client={client}>
<App />
</ApolloProvider>,
document.getElementById('root'),
);
运行后,将显示以下网页,并显示通过GraphQL查询获取的数据。

解释
请参考以下Apollo Client(React)教程以获取有关index.js文件中所写代码的详细信息。
3. 修改index.js以显示OCM的资产信息。
将GraphQL服务器的连接目标更改为OCM。
- uri: 'https://48p1r2roz4.sse.codesandbox.io',
+ uri: 'https://<ocminstance>-<tenancy>.cec.ocp.oraclecloud.com/content/published/api/v1.1/graphql',
说明
OCM的GraphQL端点如下所示
-
- https://-.cec.ocp.oraclecloud.com/content/published/api/v1.1/graphql
はOCMインスタンス名 を入力
は テナンシー名 を入力
将3.2中的OCM查询更改为获取sampleNewsType内容类型的资产列表的查询。
- const EXCHANGE_RATES = gql`
- query GetExchangeRates {
- rates(currency: "USD") {
- currency
- rate
- }
- }
- `;
+ const ITEMS_FROMOCM = gql`
+ query GetItemsFromOCM {
+ getItems(channelToken: "<channelToken>",
+ filter: {type: {op: EQUALS, value: "sampleNewsType"}}
+ ) {
+ items {
+ id
+ name
+ slug
+ }
+ }
+ }
+ `;
解释
-
- GraphQLクエリ名を変更(EXCHANGE_RATES → ITEMS_FROMOCM)
getItems()クエリを利用し、アセット・タイプsampleNewsTypeのコンテンツ・アイテムを取得
channelToken:には、1.2項で確認したチャネルトークンを設定
filter:には、アセット・タイプ=sampleNewsTypeを設定
取得するフィールドはid, name, slug の3項目を設定
getItems()クエリの使いかたは、以下のQiita記事で紹介してます。ご確認ください
[Oracle Cloud] GraphQL で Oracle Content Management のデータを取得する(2)
将现有组件修改为显示通过`getItems()`方法获取的数据。
- function ExchangeRates() {
- const { loading, error, data } = useQuery(EXCHANGE_RATES);
- if (loading) return <p>Loading...</p>;
- if (error) return <p>Error :(</p>;
-
- return data.rates.map(({ currency, rate }) => (
- <div key={currency}>
- <p>
- {currency}: {rate}
- </p>
- </div>
- ));
- }
+ function ItemsFromOCM() {
+ const { loading, error, data } = useQuery(ITEMS_FROMOCM);
+ if (loading) return <p>Loading...</p>;
+ if (error) return <p>Error :(</p>;
+
+ return data.getItems.items.map(({ id, name, slug }) => (
+ <div key={id}>
+ <p>
+ {id} : {name} : {slug}
+ </p>
+ </div>
+ ));
+ }
说明
-
- コンポーネント名を変更(ExchangeRates → ItemsFromOCM)
useQuery()で、3.3項で変更したGraphQLクエリITEMS_FROMOCMをパス
取得したアセット情報はdataに含まれます
向已有的App组件中添加组件。
- <div>
- <h2>My first Apollo app ?</h2>
- <ExchangeRates />
- </div>
+ <div>
+ <h2>My first Apollo app ?</h2>
+ <ItemsFromOCM />
+ </div>
确定
我会启动客户端应用程序,然后确认是否可以从OCM获取资产信息。
npm start
当启动时,将显示以下网页,并显示从OCM获取的id、name和slug的资产信息(此处显示2个内容项)。

在OCM环境中,新建一条名为sampleNewsType的内容项,并将其发布到sampleChannel中(这里是指新建和发布sample news content 003)。

当您刷新浏览器时,可以确认之前新创建的内容项“sample news content 003”被添加了1个(这里显示3个内容项)。

总结
在这篇文章中,我们确认了可以通过React+Apollo Client开发的客户端应用程序,通过GraphQL获取和显示在OCM资产存储库中管理和发布的资产。
在这篇文章的结尾,我会提供参考过的文章和文件的链接。
OCM製品ドキュメント
GraphQL Support in Oracle Content Management
Oracle Content Management – Samples
Qiita記事
Apollo Client で始める GraphQL
(参考)OCM产品文件
-
- Oracle Content Management 製品ドキュメント(英語)
Oracle Content Management 製品ドキュメント(日本語翻訳版)
製品ドキュメントの英語原本と日本語翻訳版です。翻訳されるまでに時差がありますので、最新情報の確認は 英語版のドキュメントをご利用ください