REST 演習1:請求書を検索・絞り込みする
この演習で身につくこと
Section titled “この演習で身につくこと”limit・offset・hasMore・totalResultsを読み、全件を取り切るまでページを進められるorderByで並びを指定し(降順・複数キー)、ページングを安定させられるfieldsとonlyDataで応答を小さくできるqで行を絞り込める。Version 1 と Version 2 の構文の違いを説明し、取り違えたときのエラーを読んで直せる
URL の組み立てとパラメータの一覧は REST API の基本、子リソース・Version・エラーの詳細は REST API 応用 を参照してください。
前提・準備(Fusion 環境あり/なし)
Section titled “前提・準備(Fusion 環境あり/なし)”シナリオ(架空)
Section titled “シナリオ(架空)”サンプル商事株式会社の経理部で、AP 担当者が請求書の状況を REST API で確認します。「未払いの請求書を金額順に見る」「四半期の請求書を抜き出す」「全件を取り切る」の 3 つを、自動化する前の準備として試します。
環境なしルート(この演習の標準)
Section titled “環境なしルート(この演習の標準)”練習用モック API を使います。Fusion 環境もユーザー登録も要りません。データは架空の請求書 30 件(InvoiceId が 300100001〜300100030)です。
- bash と curl が使えるターミナル(macOS、Linux、Windows の WSL や Git Bash)を使います。出力の整形に jq があると便利です(なければ
| jq …の部分を外し、結果をそのまま読みます) - ターミナルを使えない場合は、ブラウザの 練習用 API プレイグラウンド で同じリクエストを送れます。パスと各パラメータ(
limit・orderBy・qなど)、REST-Framework-Version を欄に入れて送信します。入力例の「describe(属性の一覧)」「ページング」「絞り込み:Version 1 の q」「絞り込み:Version 2 以降の q」「Version と q の構文が合わない(400)」から始めると便利です。同じ内容の curl も表示されます
export BASE="https://<このサイトのURL>/api/mock/fscmRestApi/resources/11.13.18.05"<このサイトのURL> は、このサイトのアドレス(例:https://example.pages.dev)に置き換えます。この演習で使う curl のオプションは次のとおりです。
| オプション | 意味 |
|---|---|
-s |
進捗表示を出さない |
-u learner:welcome1 |
Basic 認証(モックはどんな値でも通します) |
-G --data-urlencode "q=…" |
値を URL エンコードしてクエリ文字列に付ける(GET のまま) |
-H 'REST-Framework-Version: 2' |
Version を指定する(付けなければ 1) |
-w '\nHTTP %{http_code}\n' |
応答のあとに HTTP ステータスを表示する |
Fusion 環境ありルート
Section titled “Fusion 環境ありルート”同じ手順を、実機の請求書(invoices)で試せます。次の 3 点を読み替えます。
BASEをhttps://<your-pod>.fa.<region>.oraclecloud.com/fscmRestApi/resources/11.13.18.05にします-u learner:welcome1を-u "$FUSION_USER:$FUSION_PASSWORD"にします(環境変数から読み、パスワードをコマンドに直書きしません)qの値(仕入先名・金額・日付)を、テスト環境のデータに合わせて変えます
REST で請求書を参照できるユーザー(統合ユーザー)が必要です。必要なロールは、公式の invoices のページには書かれていません。セキュリティ担当に確認してください(認証・認可)。属性名は、ステップ1 の describe で確認します。本番環境ではなく、テスト環境を使います。
ステップ1 使える属性を調べる(describe)
Section titled “ステップ1 使える属性を調べる(describe)”q・orderBy・fields には、リソースの属性名を使います。属性は describe で調べます。
curl -s -u learner:welcome1 "$BASE/invoices/describe" \ | jq -c '.Resources.invoices.attributes[] | {name, type, queryable}' | head -n 5{"name":"InvoiceId","type":"integer","queryable":true}{"name":"InvoiceNumber","type":"string","queryable":true}{"name":"InvoiceType","type":"string","queryable":true}{"name":"InvoiceSource","type":"string","queryable":true}{"name":"BusinessUnit","type":"string","queryable":true}queryable が true の属性だけを q に使えます。false の属性を使うと 400 になります(公式ドキュメントの説明)。このモックの invoices は 29 属性で、すべて true です。
ステップ2 最初の一覧を取る(limit・hasMore)
Section titled “ステップ2 最初の一覧を取る(limit・hasMore)”curl -s -u learner:welcome1 "$BASE/invoices?limit=2&onlyData=true&fields=InvoiceId,InvoiceNumber"{ "items": [ { "InvoiceId": 300100001, "InvoiceNumber": "SMP-0001" }, { "InvoiceId": 300100002, "InvoiceNumber": "1001" } ], "count": 2, "hasMore": true, "limit": 2, "offset": 0, "links": [ { "rel": "self", "href": "https://<このサイトのURL>/api/mock/fscmRestApi/resources/11.13.18.05/invoices", "name": "invoices", "kind": "collection" } ]}| 項目 | 意味 |
|---|---|
items |
取得した行(配列) |
count |
今回返した件数 |
hasMore |
まだ続きがあるか。true なら次のページがある |
limit・offset |
件数の上限と開始位置(offset は 0 始まり) |
links |
コレクション自身の URL など |
limit を付けないと、このモックは 25 件で止まります。請求書は 30 件あるので、hasMore が true になります。
curl -s -u learner:welcome1 "$BASE/invoices?onlyData=true&fields=InvoiceId" | jq '{count, hasMore, limit, offset}'{ "count": 25, "hasMore": true, "limit": 25, "offset": 0}ステップ3 ページを進める(offset・totalResults・orderBy)
Section titled “ステップ3 ページを進める(offset・totalResults・orderBy)”offset を limit ずつ増やして、最後のページ(hasMore が false)まで進めます。並びを固定するため orderBy=InvoiceId を付け、総件数を知るため totalResults=true を付けます。
for OFFSET in 0 10 20 30; do curl -s -u learner:welcome1 "$BASE/invoices?limit=10&offset=$OFFSET&orderBy=InvoiceId&totalResults=true&onlyData=true&fields=InvoiceId" \ | jq -c '{offset, count, hasMore, totalResults, first: .items[0].InvoiceId}'done{"offset":0,"count":10,"hasMore":true,"totalResults":30,"first":300100001}{"offset":10,"count":10,"hasMore":true,"totalResults":30,"first":300100011}{"offset":20,"count":10,"hasMore":false,"totalResults":30,"first":300100021}{"offset":30,"count":0,"hasMore":false,"totalResults":30,"first":null}hasMoreがfalseになったoffset=20が最後のページです。offset=30は最後の行の次の位置なので、0 件です(公式ドキュメントも、offsetが件数を超えると 0 件と説明しています)totalResultsは、totalResults=trueを付けたときだけ返ります- 公式ドキュメントは、
limitとoffsetを指定しただけでは結果が整列されないと注意しています。主キーのような一意の属性でorderByすると、ページの間で重複や抜けが起きにくくなります
ステップ4 並べ替える(orderBy)
Section titled “ステップ4 並べ替える(orderBy)”curl -s -u learner:welcome1 "$BASE/invoices?limit=3&orderBy=InvoiceAmount:desc&onlyData=true&fields=InvoiceId,InvoiceNumber,Supplier,InvoiceAmount" \ | jq -c '.items[]'{"InvoiceId":300100019,"InvoiceNumber":"KK-2602","Supplier":"架空工業株式会社","InvoiceAmount":5845000}{"InvoiceId":300100006,"InvoiceNumber":"KK-2601","Supplier":"架空工業株式会社","InvoiceAmount":4650000}{"InvoiceId":300100017,"InvoiceNumber":"SMP-0004","Supplier":"サンプル商事株式会社","InvoiceAmount":2412000}:descが降順、:ascまたは省略が昇順です- 複数のキーはカンマでつなぎます。左のキーが優先です
- 文字列の並びは、大文字と小文字を区別します(公式ドキュメントの説明)
curl -s -u learner:welcome1 "$BASE/invoices?limit=4&orderBy=Supplier,InvoiceAmount:desc&onlyData=true&fields=InvoiceId,Supplier,InvoiceAmount" \ | jq -c '.items[]'{"InvoiceId":300100010,"Supplier":"Example Software LLC","InvoiceAmount":24000}{"InvoiceId":300100028,"Supplier":"Example Software LLC","InvoiceAmount":4800}{"InvoiceId":300100020,"Supplier":"Sample Logistics Inc.","InvoiceAmount":18420.75}{"InvoiceId":300100008,"Supplier":"Sample Logistics Inc.","InvoiceAmount":12850.5}仕入先名の昇順に並び、同じ仕入先の中は金額の降順になっています。
ステップ5 取得量を減らす(fields・onlyData)
Section titled “ステップ5 取得量を減らす(fields・onlyData)”3 つのリクエストの応答サイズ(バイト数)を比べます。
curl -s -u learner:welcome1 "$BASE/invoices" | wc -ccurl -s -u learner:welcome1 "$BASE/invoices?onlyData=true" | wc -ccurl -s -u learner:welcome1 "$BASE/invoices?onlyData=true&fields=InvoiceId,InvoiceNumber,InvoiceAmount" | wc -c| リクエスト | 応答サイズの目安(25 件) |
|---|---|
| そのまま | 約 45 KB |
onlyData=true |
約 27 KB |
onlyData=true と fields(3 項目) |
約 3 KB |
サイズは、サイトのホスト名の長さで少し変わります。fields は返す属性を絞り、onlyData=true は各行の links(自分自身や子リソースへの URL)を省きます。公式ドキュメントは、onlyData を「項目のペイロードをデータだけにする(links セクションなどを含めない)」と説明し、調達の Playbook は「応答からリンクをすべて除いて、サイズを減らす」と説明しています。このモックは、各行の links を省き、コレクション全体の links(self)は残します。実機でコレクション全体の links が残るかどうかは、環境で確認してください。
ステップ6 行を絞り込む(q・Version 1)
Section titled “ステップ6 行を絞り込む(q・Version 1)”ヘッダーを付けなければ Version 1 です。q は「項目 演算子 値」で書き、項目の違う条件は ; でつなぎます(AND)。同じ項目の範囲は、2 つ目の項目名を省いて and でつなげます。演算子は =・!=・>・>=・<・<= を使います。q には空白・日本語・> などが入るので、-G --data-urlencode で渡します。
curl -s -G -u learner:welcome1 "$BASE/invoices?orderBy=InvoiceId&totalResults=true&onlyData=true&fields=InvoiceId,InvoiceNumber,InvoiceAmount,PaidStatus" \ --data-urlencode "q=InvoiceAmount>=100000 and <=500000;PaidStatus!=Paid" \ | jq -c '{totalResults, count, hasMore}, (.items[] | [.InvoiceId, .InvoiceNumber, .InvoiceAmount, .PaidStatus])'{"totalResults":3,"count":3,"hasMore":false}[300100014,"RU-2603",143400,"Unpaid"][300100026,"DM-1003",156000,"Unpaid"][300100030,"RU-2604",138000,"Unpaid"]「金額が 10 万円以上 50 万円以下で、支払済みではない」請求書が 3 件です。この形は、公式ドキュメントの Version 1 の例(q=deptno>=10 and <=30;loc!=NY)と同じです。文字列に引用符を付けない書き方も、この例に合わせています(このモックは引用符付きも受け付けます)。
ステップ7 行を絞り込む(q・Version 2 以降)
Section titled “ステップ7 行を絞り込む(q・Version 2 以降)”REST-Framework-Version: 2 を付けると、q は and・or・括弧が使える式の書き方になります。文字列と日付は単一引用符 '…' で囲みます(公式の例も DeptName = 'SALES'、HireDate = '1999-01-01' の形です)。
curl -s -G -u learner:welcome1 -H 'REST-Framework-Version: 2' "$BASE/invoices?orderBy=InvoiceAmount:desc&totalResults=true&onlyData=true&fields=InvoiceId,InvoiceNumber,InvoiceAmount,PaidStatus" \ --data-urlencode "q=InvoiceAmount >= 1000000 and (PaidStatus = 'Unpaid' or PaidStatus = 'Partially paid')" \ | jq -c '{totalResults, count, hasMore}, (.items[] | [.InvoiceId, .InvoiceNumber, .InvoiceAmount, .PaidStatus])'{"totalResults":2,"count":2,"hasMore":false}[300100019,"KK-2602",5845000,"Partially paid"][300100017,"SMP-0004",2412000,"Unpaid"]Version 2 以降で使える主な書き方は次のとおりです。
| 目的 | 書き方の例 |
|---|---|
| 複数の候補 | PaidStatus IN ('Unpaid', 'Partially paid') |
| 範囲 | InvoiceAmount BETWEEN 100000 AND 500000 |
| あいまい検索 | InvoiceNumber LIKE 'SMP-%' |
| 大文字小文字を無視 | UPPER(Supplier) LIKE '%LOGI%' |
| 空かどうか | PurchaseOrderNumber IS NULL |
| 子リソースの属性 | invoiceLines.LineType = 'Freight' |
ステップ8 Version を取り違えたときのエラーを見る
Section titled “ステップ8 Version を取り違えたときのエラーを見る”Version 1(ヘッダーなし)で、別の項目を and でつないでみます。
curl -s -G -u learner:welcome1 -w '\nHTTP %{http_code}\n' "$BASE/invoices?limit=1" \ --data-urlencode "q=InvoiceAmount>100000 and PaidStatus=Unpaid"Combining different attributes with and / or cannot be used in q with REST-Framework-Version 1. Specify the header REST-Framework-Version: 2 (or later), or use the Version 1 syntax: <attribute><operator><value> combined with ';' (for example: InvoiceAmount>100000;PaidStatus=Unpaid).HTTP 400次に、Version 2 で ; を使ってみます。
curl -s -G -u learner:welcome1 -H 'REST-Framework-Version: 2' -w '\nHTTP %{http_code}\n' "$BASE/invoices?limit=1" \ --data-urlencode "q=InvoiceAmount>100000;PaidStatus=Unpaid"';' cannot be used to combine conditions with REST-Framework-Version 2 or later. Use and / or instead (for example: InvoiceAmount > 100000 and PaidStatus = 'Unpaid').HTTP 400どちらも 400 です。メッセージが直し方を示しています(Version 1 から 3 のエラーは、このようにテキストで返ります。形式の違いは REST 演習2 で扱います)。Version ごとの書き方の違いをまとめます。
| やりたいこと | Version 1 | Version 2 以降 |
|---|---|---|
| 項目の違う条件を AND でつなぐ | A=x;B>1 |
A = 'x' and B > 1 |
| OR・括弧 | ; は AND のみ |
or・( ) が使える |
| 範囲 | A>=1 and <=9 |
A BETWEEN 1 AND 9 |
| 複数の候補 | 使えない(IN は Version 2 以降) |
A IN ('x', 'y') |
子の属性・UPPER() |
使えない | 使える |
| 文字列・日付 | 公式の例は引用符なし | 単一引用符で囲む |
確認ポイント
Section titled “確認ポイント”-
limitを付けないと 25 件で止まり、hasMoreがtrueになることを確認した -
offsetを 0・10・20 と進めて 30 件を取り、offset=20のhasMoreがfalseだった -
orderBy=InvoiceAmount:descと、複数キーのorderByで並びが変わることを確認した -
onlyDataとfieldsで、応答サイズが約 45 KB から約 3 KB に減ることを確認した - Version 1 の
qで、;による AND とand <=の範囲指定ができた - Version 2 の
qで、and・or・括弧が使えた - Version を取り違えたときの 400 のメッセージを読んで、
qを直せた
課題と解答例
Section titled “課題と解答例”課題は curl かプレイグラウンドで解きます。解答例は、解いてから開いて確認してください。
課題1 未払い請求書の上位 5 件(Version 1)
Section titled “課題1 未払い請求書の上位 5 件(Version 1)”支払状況(PaidStatus)が Unpaid の請求書を、金額(InvoiceAmount)の大きい順に上位 5 件取得してください。未払いが全部で何件あるかも表示します。
解答例を表示
curl -s -G -u learner:welcome1 "$BASE/invoices?orderBy=InvoiceAmount:desc&limit=5&totalResults=true&onlyData=true&fields=InvoiceId,InvoiceNumber,Supplier,InvoiceAmount" \ --data-urlencode "q=PaidStatus=Unpaid" \ | jq -c '{totalResults, count, hasMore}, (.items[] | [.InvoiceId, .InvoiceNumber, .Supplier, .InvoiceAmount])'{"totalResults":14,"count":5,"hasMore":true}[300100017,"SMP-0004","サンプル商事株式会社",2412000][300100024,"MS-26-011","見本システム株式会社",990000][300100016,"DM-1002","デモ電機株式会社",867300][300100029,"SMP-0006","サンプル商事株式会社",721000][300100026,"DM-1003","デモ電機株式会社",156000]未払いは全部で 14 件(totalResults)で、ここには上位 5 件だけが出ています(hasMore が true)。orderBy を付けないと、「上位」の意味がなくなります。
課題2 サンプル商事株式会社の 10 万円超の請求書(Version 1)
Section titled “課題2 サンプル商事株式会社の 10 万円超の請求書(Version 1)”仕入先が サンプル商事株式会社 で、金額が 100,000 を超える請求書を、InvoiceId の順に取得してください。InvoiceId・請求書番号・金額・支払状況を表示します。
解答例を表示
curl -s -G -u learner:welcome1 "$BASE/invoices?orderBy=InvoiceId&onlyData=true&fields=InvoiceId,InvoiceNumber,InvoiceAmount,PaidStatus" \ --data-urlencode "q=Supplier=サンプル商事株式会社;InvoiceAmount>100000" \ | jq -c '.items[] | [.InvoiceId, .InvoiceNumber, .InvoiceAmount, .PaidStatus]'[300100001,"SMP-0001",485000,"Paid"][300100007,"SMP-0002",1250000,"Paid"][300100011,"SMP-0003",508000,"Partially paid"][300100017,"SMP-0004",2412000,"Unpaid"][300100029,"SMP-0006",721000,"Unpaid"]SMP-0005(InvoiceId 300100018)は、金額が -120,000 のクレジットメモなので外れます。日本語を含むので、-G --data-urlencode を使います。
課題3 2026 年 4〜6 月の請求書の件数(Version 1 と 2)
Section titled “課題3 2026 年 4〜6 月の請求書の件数(Version 1 と 2)”請求書日付(InvoiceDate)が 2026-04-01 から 2026-06-30 までの請求書は何件ですか。Version 1 と Version 2 の両方で、totalResults を見て答えてください。
解答例を表示
# Version 1curl -s -G -u learner:welcome1 "$BASE/invoices?limit=1&totalResults=true&onlyData=true&fields=InvoiceId" \ --data-urlencode "q=InvoiceDate>=2026-04-01;InvoiceDate<=2026-06-30" | jq -c '{totalResults}'
# Version 2curl -s -G -u learner:welcome1 -H 'REST-Framework-Version: 2' "$BASE/invoices?limit=1&totalResults=true&onlyData=true&fields=InvoiceId" \ --data-urlencode "q=InvoiceDate BETWEEN '2026-04-01' AND '2026-06-30'" | jq -c '{totalResults}'{"totalResults":8}{"totalResults":8}どちらも 8 件です。件数だけが欲しいときは、limit=1 と fields で応答を小さくして、totalResults だけを見ます。Version 1 では InvoiceDate>=2026-04-01 and <=2026-06-30 とも書けます。
課題4 limit=7 で全件を取るには何回必要か
Section titled “課題4 limit=7 で全件を取るには何回必要か”limit=7 で 30 件すべてを取ります。何回のリクエストが必要で、各回の count と hasMore はどうなりますか。orderBy=InvoiceId を付けて、offset を 7 ずつ増やして確かめてください。
解答例を表示
for OFFSET in 0 7 14 21 28 35; do curl -s -u learner:welcome1 "$BASE/invoices?limit=7&offset=$OFFSET&orderBy=InvoiceId&onlyData=true&fields=InvoiceId" \ | jq -c '{offset, count, hasMore}'done{"offset":0,"count":7,"hasMore":true}{"offset":7,"count":7,"hasMore":true}{"offset":14,"count":7,"hasMore":true}{"offset":21,"count":7,"hasMore":true}{"offset":28,"count":2,"hasMore":false}{"offset":35,"count":0,"hasMore":false}5 回です。最後のページ(offset=28)は count が 2 で、hasMore が false になります。offset=35 は不要な 6 回目です。「count が limit より少ないこと」ではなく、「hasMore が false であること」を終了の条件にします。
課題5 Version 2 でしか書けない条件を体験する
Section titled “課題5 Version 2 でしか書けない条件を体験する”- 仕入先が
サンプル商事株式会社またはテスト物産株式会社の請求書の件数を、Version 2 のINで求めてください - 同じ
qを、Version 1(ヘッダーなし)で送ると何が起きますか - Version 1 のまま、同じ件数を求めるには、どうしますか
解答例を表示
# 1. Version 2curl -s -G -u learner:welcome1 -H 'REST-Framework-Version: 2' "$BASE/invoices?limit=1&totalResults=true&onlyData=true&fields=InvoiceId" \ --data-urlencode "q=Supplier IN ('サンプル商事株式会社', 'テスト物産株式会社')" | jq -c '{totalResults}'
# 2. Version 1(ヘッダーなし)curl -s -G -u learner:welcome1 -w '\nHTTP %{http_code}\n' "$BASE/invoices?limit=1" \ --data-urlencode "q=Supplier IN ('サンプル商事株式会社', 'テスト物産株式会社')"
# 3. Version 1 で仕入先ごとに分けるfor S in サンプル商事株式会社 テスト物産株式会社; do curl -s -G -u learner:welcome1 "$BASE/invoices?limit=1&totalResults=true&onlyData=true&fields=InvoiceId" \ --data-urlencode "q=Supplier=$S" | jq -c '{totalResults}'done{"totalResults":9}The IN operator cannot be used in q with REST-Framework-Version 1. Specify the header REST-Framework-Version: 2 (or later), or use the Version 1 syntax: <attribute><operator><value> combined with ';' (for example: InvoiceAmount>100000;PaidStatus=Unpaid).HTTP 400{"totalResults":6}{"totalResults":3}- Version 2 なら、1 回のリクエストで 9 件です
- Version 1 では
INが使えず、400 になります - 仕入先ごとにリクエストを分け、クライアント側で合算します(6 件 + 3 件 = 9 件)。件数が多い場合は、リクエストごとにページングも必要です
よくあるエラーと対処
Section titled “よくあるエラーと対処”メッセージは、このモックのものです(実機とは異なります)。
| 症状 | 原因と対処 |
|---|---|
| 401 Unauthorized | 認証情報がない。-u learner:welcome1 を付ける |
400(Combining different attributes with and / or …) |
Version 1 で、別の項目を and・or でつないだ。; でつなぐか、REST-Framework-Version: 2 を付けて and・or で書く |
400(';' cannot be used …) |
Version 2 以降で ; を使った。and に直す |
400(… Enclose string values in single quotes) |
Version 2 以降で、文字列や日付を引用符なしで書いた。'Unpaid' のように単一引用符で囲む |
400(… is not an attribute of invoices.) |
q・orderBy・fields の属性名の綴りや大文字小文字の誤り。describe で確認する |
400(The value … of the limit parameter is not valid) |
limit は 1 以上、offset は 0 以上の整数にする |
| 0 件になる | 値の大文字小文字が違う。LIKE は大文字小文字を区別する。条件が厳しすぎる、offset が総件数を超えている場合もある |
日本語や % を含む q がおかしくなる |
URL エンコードされていない。-G --data-urlencode "q=…" を使う |
| 30 件あるのに 25 件しか取れない | 既定の limit(このモックは 25)で止まっている。hasMore が true なら続きを取る |
- キーセット方式のページング:
orderBy=InvoiceId&limit=5にq=InvoiceId>300100010を付けると、offsetを使わずに「ID が 300100010 より後ろ」の 5 件を取れます。前のページの最後のInvoiceIdを次のqに使うループを考えてください。公式ドキュメントにも、同じ考え方の例(orderBy=OptyId&q=OptyId>1000)があります。Python での実装は REST 演習3 で扱います - limit の境界:
limit=501・limit=0・offset=-1を送り、応答のlimitと HTTP ステータスを記録してください - 別のリソース:
suppliers(仕入先)でdescribeを見て、Version 2 のqでBusinessRelationship = 'SPEND_AUTHORIZED'の仕入先を絞り込んでください - 実機との比較(Fusion 環境がある人):同じ手順を実機の
invoicesで試し、結果の違いを次の「実機との違い」の表に書き足してください
実機との違い
Section titled “実機との違い”| 項目 | このモック | 実機の Fusion |
|---|---|---|
| データ | 架空の請求書 30 件。内容は固定 | 自社のデータ。件数と値は環境による |
| 属性 | invoices の 29 属性だけ(実機にもある属性) |
属性はもっと多い。describe で確認する |
| 既定の limit と上限 | 既定 25、上限 500(501 以上は 500 に丸める) | 公式の Manage Collections と Get all invoices には、既定値も上限も書かれていない。調達の Integration Playbook には、調達の REST API は 1 回に 500 件を超えて返さないとある。応答の limit で確認する |
totalResults |
正確な総件数 | 公式は推定の行数(estimated row count)と説明している |
onlyData=true |
各行の links を省く。コレクション全体の links(self)は残る |
公式は、項目のペイロードをデータだけにすると説明し、調達の Playbook は応答からすべてのリンクを除くと説明している。コレクション全体の links が残るかは、実機で確認する |
q の演算子 |
NOT IN・NOT LIKE・NOT BETWEEN・右辺の UPPER() は使えない |
公式は、これらを使える演算子・書き方として載せている |
Version 1 の q |
LIKE で % が使える |
公式は % を Version 2 以降のみと説明している |
| エラー | 英語の簡易メッセージ(モック独自) | Oracle のメッセージとコード |
| 応答の見た目 | 整形されている | 整形されていないことがある。jq で整形する |
- Version 1 の
qの引用符の扱いは、公式の例(loc!=NY)に合わせています。文字列に空白や記号が入る場合の書き方は、環境で確認してください - 練習用 API で動いた
qが実機でそのまま動くとは限りません。属性名はdescribeと公式ドキュメントで確認してください - 作成・更新・削除は、この演習では扱いません。REST 演習2 で扱います
公式ドキュメント
Section titled “公式ドキュメント”- Manage Collections(
q・orderBy・ページング、Version 1 と 2 のqの違い) - Set the REST Framework Version(Version ごとの変更点)
- Get all invoices(
invoicesの問い合わせパラメータと finder) - REST APIs(Integration Playbooks for Procurement 26D)(1 回に返す件数の上限、
fields・onlyDataの推奨)
本サイトは学習目的で個人が作成した非公式の教材であり、Oracle Corporation およびその関連会社とは関係ありません。内容の正確性は保証しません。最新の仕様・試験範囲は必ず公式ドキュメントと Oracle University の情報で確認してください。
模擬テストの問題は公開されている出題範囲(Exam Topics)と公式ドキュメントをもとに独自に作成したもので、実際の試験問題ではありません。
Oracle、Java、MySQL は Oracle Corporation およびその子会社、関連会社の米国およびその他の国における登録商標です。その他の製品名・会社名は各社の商標です。
© 2026 Fusion ERP 実装ラボ