REST API の基本(URL・クエリパラメータ・ページング)
URL の構造
Section titled “URL の構造”https://<your-pod>.fa.<region>.oraclecloud.com/fscmRestApi/resources/11.13.18.05/invoices/300100001/child/invoiceLines上の URL は、ホスト → コンテキスト・ルート(fscmRestApi)→ resources → バージョン → リソース(invoices)→ キー → 子リソース、の順に並んでいます。
| 部分 | 内容 | 例 |
|---|---|---|
| ホスト | 環境の REST サーバー URL(環境の案内メールに記載) | https://<your-pod>.fa.<region>.oraclecloud.com |
| コンテキスト・ルート | 製品群ごとのルート | fscmRestApi(ERP・SCM)、hcmRestApi(HCM)、crmRestApi(CX) |
| バージョン | API のバージョン。公式の推奨は 11.13.18.05 |
省略すると 404 |
| リソース | 業務オブジェクト | invoices(AP 請求書)、erpintegrations、currencyRates |
| キーと子リソース | 1 件の指定と、その配下のデータ | /invoices/{InvoiceId}/child/invoiceLines |
- 公式ドキュメントの例では、ERP の請求書は
/fscmRestApi/resources/11.13.18.05/invoices、HCM の従業員は/hcmRestApi/resources/11.13.18.05/workers、CX の取引先は/crmRestApi/resources/11.13.18.05/accountsです。 - 26D 時点では、
/api/boss/data/objects/<モジュール>/v1/<サービス名>形式の新しいリソース(ドキュメント上の呼称は Spectra)もあります。クエリパラメータの書き方($filter・$limitなど)や認証(OAuth 必須)が異なるため、このページでは従来の11.13.18.05形式を扱います。
リソースの調べ方
Section titled “リソースの調べ方”- 製品別の REST API ドキュメントを見る:「REST API for Oracle Fusion Cloud Financials」などのガイドの All REST Endpoints に、リソース・操作・属性・finder の一覧があります。
describeで実環境のメタデータを見る:属性の型、必須(mandatory)、更新可否(updatable)、検索可否(queryable)、子リソース、アクション、値リスト(LOV)が分かります。環境ごとに定義が異なる項目(DFF など)を確認するときもdescribeを使います。- finder を確認する:各リソースの「Get all」操作の説明に、使える finder 名と変数が載っています。
| 用途 | URL |
|---|---|
| 1 リソースのメタデータ | /fscmRestApi/resources/11.13.18.05/invoices/describe |
| 全リソースの URL 一覧 | /fscmRestApi/resources/11.13.18.05/describe?metadataMode=list |
| 全リソースの簡易メタデータ | /fscmRestApi/resources/11.13.18.05/describe?metadataMode=minimal |
Accept: application/vnd.oracle.openapi3+jsonを付けると、OpenAPI 形式で取得できます。Accept-Languageを付けると、表示ラベル(titleなど)がその言語で返ります。
HTTP メソッド
Section titled “HTTP メソッド”| メソッド | 単一リソース | コレクション | 用途 |
|---|---|---|---|
| GET | 〇 | 〇 | 1 件取得/一覧取得 |
| POST | - | 〇 | 新規作成、カスタム・アクションの実行 |
| PATCH | 〇 | - | 指定した項目だけ更新 |
| DELETE | 〇 | - | 削除 |
- POST・PATCH の本文の Content-Type は
application/vnd.oracle.adf.resourceitem+jsonです(application/jsonを受け付けるリソースもあります)。 - 子リソースは、通常は親リソースのセキュリティ権限を引き継ぎます。
- 作成・更新・削除は REST API 応用 で扱います。
クエリパラメータ
Section titled “クエリパラメータ”| パラメータ | 用途 | 例 | 既定値・注意 |
|---|---|---|---|
q |
行の絞り込み | q=InvoiceAmount > 100000 |
queryable な属性のみ。構文は Framework Version で変わる |
finder |
定義済み検索 | finder=PrimaryKey;InvoiceId=300100001 |
形式は 名前;変数=値,変数=値 |
fields |
返す属性の限定 | fields=InvoiceId,InvoiceNumber |
子は ;子:属性 で指定 |
expand |
子リソースの埋め込み | expand=invoiceLines |
既定は埋め込まない。all で全部 |
onlyData |
links を省く |
onlyData=true |
既定は false(links 付き) |
limit |
1 回の件数 | limit=100 |
既定 25。1 回に返るのは最大 500 件 |
offset |
開始位置 | offset=100 |
既定 0(0 始まり) |
totalResults |
総件数を返す | totalResults=true |
既定 false |
orderBy |
並べ替え | orderBy=InvoiceDate:desc,InvoiceId |
既定は昇順。並びは大文字小文字を区別 |
fieldsとexpandを組み合わせると、親と子の必要な属性だけを 1 回で取れます:fields=InvoiceId,InvoiceNumber;invoiceLines:LineNumber,LineAmount- 存在しない属性や、
queryableでない属性をqに使うと 400 Bad Request になります。
q の書き方(Framework Version 1 と 2 以降)
Section titled “q の書き方(Framework Version 1 と 2 以降)”REST Framework Version は、要求ヘッダー REST-Framework-Version で指定します。省略時は Version 1 です。
| Version | 構文 | 例 |
|---|---|---|
| 1(既定) | 検索例(Query by Example)形式。条件を ; で区切ると AND。子リソースでの絞り込みは不可 |
q=InvoiceAmount>=100000;PaidStatus=Unpaid |
| 2 以降 | 式の形式。and・or・括弧、IN・BETWEEN・UPPER()、子リソースの属性で絞り込み可 |
q=InvoiceAmount >= 100000 and PaidStatus = 'Unpaid' |
Version 2 以降では、Version 1 の ; 区切りの書き方はエラーになります。Version 2 以降で使える主な演算子は次のとおりです。
| データ型 | 主な演算子 |
|---|---|
| 文字列 | =、<>、LIKE(% は Version 2 以降)、UPPER(属性) LIKE、IN、NOT IN、IS NULL、IS NOT NULL |
| 数値 | =、<>、<、<=、>、>=、BETWEEN、NOT BETWEEN、IN、NOT IN |
| 日付・日時 | 比較演算子、BETWEEN、NOT BETWEEN、IS NULL |
| 真偽値 | = 'true'、= 'false'、= 'Y'、= 'N' など |
q=Supplier IN ('サンプル商事株式会社', 'テスト物産株式会社')q=InvoiceDate BETWEEN '2026-10-01' AND '2026-10-31'q=UPPER(Description) LIKE '%RENT%'q=invoiceLines.LineType = 'Freight' (子リソースの属性で親を絞る。Version 2 以降)Version 9 では、LIKE の中で \ を使ってワイルドカード(% など)をエスケープできます。
一覧の応答は、次の形で返ります。
{ "items": [ { "InvoiceId": 300100001, "InvoiceNumber": "SMP-0001" } ], "count": 25, "hasMore": true, "limit": 25, "offset": 0, "links": [ { "rel": "self", "href": "https://.../invoices", "name": "invoices", "kind": "collection" } ]}| 項目 | 意味 |
|---|---|
items |
今回返ったデータ |
count |
今回返った件数 |
hasMore |
まだ続きがあれば true、最後なら false |
limit・offset |
今回の取得条件 |
totalResults |
総件数(totalResults=true のときだけ返る) |
全件取得の手順は次のとおりです。
limit(例:500)と、一意な属性でのorderBy(例:InvoiceId)を付けて 1 回目を取得するoffsetに、それまでの合計件数を足して次を取得するhasMoreがfalseになったら終了する
orderByがないと、ページ間の並び順は保証されません。また、取得中にデータが増減すると、ページの境目がずれて重複や漏れが起きます。- 大量・長時間の取得では、一意キーで並べて「前ページの最後のキーより大きいもの」を
qで指定する方法(キーセット方式。例:orderBy=InvoiceId&q=InvoiceId > 300100500)も有効です。公式の並べ替えの説明にもorderBy=OptyId&q=OptyId>1000という形の例があります。 - 数万件を超える抽出は REST ではなく BICC などを検討します(連携方式の全体像)。
日付・数値の形式
Section titled “日付・数値の形式”| 型 | 形式 | 例 |
|---|---|---|
日付(string (date)) |
ISO 8601 の日付文字列 | "2026-10-01" |
日時(string (date-time)) |
ISO 8601 の日時文字列 | "2026-10-01T09:30:00+00:00" |
数値(number・integer) |
JSON の数値 | 123456.78 |
| 真偽値 | true/false |
true |
| 長いテキスト(CLOB) | 文字列 | Version 8 以降は Base64 ではなく文字列のまま |
qの日時は UTC 形式(例:'2026-10-01T00:00:00Z')とローカル形式の両方を受け付けます。属性ごとのタイムゾーンの扱いは、実データで確認してから条件を組みます。- Version 9 では、桁数の大きい数値が丸めを防ぐために文字列で返ります。金額は、受け取る側でも浮動小数点ではなく 10 進数型(Python なら
Decimal)で扱います。 - URL に空白や引用符を含めるときは URL エンコードが必要です。curl では
-Gと--data-urlencodeを使うと安全です。
export FA_HOST="https://<your-pod>.fa.<region>.oraclecloud.com"export API="$FA_HOST/fscmRestApi/resources/11.13.18.05"# FA_USER / FA_PASS は環境変数に設定済みとする
# 1) 属性の一覧(queryable・mandatory を確認)curl -s -u "$FA_USER:$FA_PASS" "$API/invoices/describe" | head -c 2000
# 2) 未払いの高額請求書を、必要な項目だけ・新しい順に 50 件curl -s -G -u "$FA_USER:$FA_PASS" "$API/invoices" \ -H "REST-Framework-Version: 4" \ --data-urlencode "q=InvoiceAmount >= 100000 and PaidStatus = 'Unpaid'" \ --data-urlencode "fields=InvoiceId,InvoiceNumber,Supplier,InvoiceAmount,InvoiceDate" \ --data-urlencode "orderBy=InvoiceDate:desc,InvoiceId" \ --data-urlencode "limit=50" \ --data-urlencode "onlyData=true"
# 3) finder で主キー検索curl -s -G -u "$FA_USER:$FA_PASS" "$API/invoices" \ --data-urlencode "finder=PrimaryKey;InvoiceId=300100001" \ --data-urlencode "onlyData=true"モック API の例
Section titled “モック API の例”このサイトの練習用モック API(プレイグラウンド)でも同じ形で試せます。モックは本物の Oracle API ではなく、データは架空です。
export BASE="https://<このサイトのURL>/api/mock/fscmRestApi/resources/11.13.18.05"
# Version 1(既定):; 区切りで ANDcurl -s -G -u learner:welcome1 "$BASE/invoices" \ --data-urlencode "q=InvoiceAmount>100000;PaidStatus=Unpaid" \ --data-urlencode "fields=InvoiceId,InvoiceNumber,InvoiceAmount,PaidStatus" \ --data-urlencode "onlyData=true"
# Version 2:and / or / 括弧が使えるcurl -s -G -u learner:welcome1 "$BASE/invoices" \ -H "REST-Framework-Version: 2" \ --data-urlencode "q=InvoiceAmount >= 100000 and (PaidStatus = 'Unpaid' or PaidStatus = 'Partially paid')" \ --data-urlencode "orderBy=InvoiceAmount:desc" \ --data-urlencode "onlyData=true"
# ページング:totalResults と hasMore を確認curl -s -u learner:welcome1 "$BASE/invoices?limit=10&offset=20&totalResults=true&onlyData=true&orderBy=InvoiceId"
# 親子をまとめて取得curl -s -G -u learner:welcome1 "$BASE/invoices" \ --data-urlencode "fields=InvoiceId,InvoiceNumber;invoiceLines:LineNumber,LineAmount" \ --data-urlencode "expand=invoiceLines" \ --data-urlencode "limit=2" --data-urlencode "onlyData=true"全件取得の最小例(Python)
Section titled “全件取得の最小例(Python)”import osimport requests
BASE = os.environ["BASE"] # 実機なら https://<host>/fscmRestApi/resources/11.13.18.05AUTH = (os.environ.get("FA_USER", "learner"), os.environ.get("FA_PASS", "welcome1"))
def fetch_all(resource: str, page_size: int = 500, **params) -> list[dict]: rows, offset = [], 0 while True: query = {"limit": page_size, "offset": offset, "onlyData": "true", **params} r = requests.get(f"{BASE}/{resource}", params=query, auth=AUTH, timeout=60) r.raise_for_status() body = r.json() rows.extend(body["items"]) if not body.get("hasMore"): return rows offset += body["count"]
invoices = fetch_all("invoices", orderBy="InvoiceId", fields="InvoiceId,InvoiceNumber,InvoiceAmount")print(len(invoices))再試行・タイムアウト・トークン更新を加えた実践版は REST 演習3 で作ります。
落とし穴とベストプラクティス
Section titled “落とし穴とベストプラクティス”- 必要な項目だけ取る:
fieldsとonlyData=trueで応答を小さくします(公式の Integration Playbook も推奨しています)。 - 検索条件は
queryableを確認してから書く:describeで確認できます。 - 環境固有の項目は
describeで確認する:DFF などは環境ごとに定義が異なります。
試験対策ポイント
Section titled “試験対策ポイント”- 対応する試験:OIC 模擬テスト(ERP Cloud アダプタや REST アダプタで Fusion の REST リソースを呼ぶ場面)
- 覚えるポイント
- URL の構成要素(コンテキスト・ルート、
resources、バージョン11.13.18.05、リソース、/child/) q・finder・fields・expand・onlyData・limit・offset・totalResults・orderByの役割hasMoreによるページングと、limitの既定 25 件- Framework Version 1 と 2 以降で
qの構文が変わること
- URL の構成要素(コンテキスト・ルート、
- 手を動かして確認:REST 演習1:請求書を検索・絞り込みする
公式ドキュメント
Section titled “公式ドキュメント”- Quick Start(REST API for Oracle Fusion Cloud Financials 26D)
- REST API Versions and URL Paths
- Manage Collections(q・finder・ページング・並べ替え)
- Supported HTTP Methods(クエリパラメータの既定値)
- Supported Data Types
- Access Metadata(describe)
- Set the REST Framework Version
- REST APIs(Integration Playbooks for Procurement 26D)
本サイトは学習目的で個人が作成した非公式の教材であり、Oracle Corporation およびその関連会社とは関係ありません。内容の正確性は保証しません。最新の仕様・試験範囲は必ず公式ドキュメントと Oracle University の情報で確認してください。
模擬テストの問題は公開されている出題範囲(Exam Topics)と公式ドキュメントをもとに独自に作成したもので、実際の試験問題ではありません。
Oracle、Java、MySQL は Oracle Corporation およびその子会社、関連会社の米国およびその他の国における登録商標です。その他の製品名・会社名は各社の商標です。
© 2026 Fusion ERP 実装ラボ