HTTP リクエストを作成し、ポータル Web API のエラーを処理する
Web API とのやりとりには、必要なヘッダーを含む HTTP リクエストの作成と、エラーを含む HTTP 応答の処理が含まれます。
重要
- この機能を使用するには、ポータルのバージョンが 9.3.3.x 以降である必要があります。
Web API URL およびバージョン管理
次のテーブルの形式を使用して、Web API URLを作成します。
部分 | Description |
---|---|
プロトコル | https:// |
ベース URL | <ポータル URL> |
Web API パス | _api |
リソース | 使用するテーブルの論理名 |
たとえば、ケースを参照する場合は次の形式を使用します。
https://contoso.powerappsportals.com/_api/case
すべての Web API リソースは、Web ロールを持つコンテキスト内のそれぞれの テーブルのアクセス許可 に従います。
HTTP メソッド
HTTP リクエストでは、さまざまな種類のメソッドを使用できます。 ただし、ポータル Web API は、次のテーブルのメソッドのみをサポートします。
メソッド | 使い方 |
---|---|
入手 | テーブルからデータを取得するときに使用します。 |
投稿する | レコードの作成時に使用します。 |
PATCH | テーブルを更新するとき、または upsert 操作を実行するときに使用します。 |
Delete | レコードまたはレコードの個々のフィールド値を削除するときに使用します。 |
PUT | レコードの個々のフィールドを更新するために、限られた状況で使用します。 |
HTTP ヘッダー
WebAPI は JSON のみをサポートします。 各 HTTP ヘッダーには以下を含める必要があります。
- application/json の 承認 ヘッダー値 (応答ボディが期待されていない場合でも)。
- 要求本文に JSON データが含まれる要求の場合は、
application/json
を値に持つ コンテンツの種類 ヘッダーを含める必要があります。
現在の OData バージョンの 4.0 ですが、今後のバージョンで新機能が使用できるようになる可能性があります。 次の構文を使用して、将来コードに適用される OData バージョンが明確かどうかを確認します。
構文
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
例: CSRF トークンのラッパー AJAX 関数
(function(webapi, $){
function safeAjax(ajaxOptions) {
var deferredAjax = $.Deferred();
shell.getTokenDeferred().done(function (token) {
// add headers for ajax
if (!ajaxOptions.headers) {
$.extend(ajaxOptions, {
headers: {
"__RequestVerificationToken": token
}
});
} else {
ajaxOptions.headers["__RequestVerificationToken"] = token;
}
$.ajax(ajaxOptions)
.done(function(data, textStatus, jqXHR) {
validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve);
}).fail(deferredAjax.reject); //ajax
}).fail(function () {
deferredAjax.rejectWith(this, arguments); // on token failure, pass the token ajax and args
});
return deferredAjax.promise();
}
webapi.safeAjax = safeAjax;
})(window.webapi = window.webapi || {}, jQuery)
例: テーブル データを取得する
webapi.safeAjax({
type: "GET",
url: "/_api/contacts?$select=firstname,lastname",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
例: テーブル データの作成
webapi.safeAjax({
type: "POST",
url: "/_api/accounts",
contentType: "application/json",
data: JSON.stringify({
"name": "Sample Account"
}),
success: function (res, status, xhr) {
console.log("entityID: "+ xhr.getResponseHeader("entityid"))
}
});
例: テーブル データの更新
webapi.safeAjax({
type: "PATCH",
url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
contentType: "application/json",
data: JSON.stringify({
"name": "Sample Account - Updated"
}),
success: function (res) {
console.log(res);
}
});
例: テーブル データの削除
webapi.safeAjax({
type: "DELETE",
url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
ステータス コードの確認
各 HTTP 要求応答には、ステータス コードが含まれています。 ポータル Web API で返される状態コードには、次が含まれます。
コード | Description | タイプ |
---|---|---|
200 OK | この応答は操作で応答本文にデータが返されるときに発生します。 | 成功 |
204 コンテンツがありません | この応答は操作が成功した際に発生しますが、応答本文ではデータが返されません。 | 成功 |
403 無効 | この応答は次のような種類のエラーの場合に発生します:
|
クライアント エラー |
401 未承認 | この応答は次のような種類のエラーの場合に発生します。
|
クライアント エラー |
413 ペイロードが大きすぎます | この応答は要求の長さが長すぎるときに発生します。 | クライアント エラー |
400 不正なリクエスト | この応答は引数が無効である場合に発生します。 InvalidAttribute |
クライアント エラー |
404 見つかりません | この応答はリソースが存在しない場合に発生します。 Web API について、テーブルは公開されていません。 |
クライアント エラー |
405 許可されていないメソッド | このエラーは、メソッドとリソースの組み合わせが正しくない場合に発生します。 たとえば、DELETE または PATCH をテーブルのコレクションに対して使用することはできません。 この状況は次のような種類のエラーの場合に発生する可能性があります。
|
クライアント エラー |
501 実装されていません | この応答は一部の要求の操作が実装されていない場合に発生します。 | サーバー エラー |
503 サービスは使用できません | この応答は Web API サービスを使用できない場合に発生します。 | サーバー エラー |
応答からのエラーの解析
まだ内部エラーが含まれている次の HTTP 応答例を検討してください。
{
"error":{
"code": "This code is not related to the http status code and is frequently empty",
"message": "A message describing the error",
"cdscode": "Dataverse error code",
"innererror": {
"code": "800xxxx",
"message": "A message describing the error. This is frequently the same as the outer message.."
}
}
}
エラー コード
処理されたすべてのシナリオで、エラーコードは 16 進形式で表示されます。 次の表に、各エラーコードとそれぞれの名前およびメッセージを示します。
エラー コード | 名前エラー | エラー メッセージ |
---|---|---|
900400FF | NoAttributesForTableCreate | [テーブルの作成] アクションに属性がありません。 |
90040100 | InvalidAttribute | テーブル {1} の属性 {0} が見つかりません。 |
90040101 | AttributePermissionIsMissing | テーブル {1} の属性 {0} が Web API で有効になっていません。 |
90040102 | TablePermissionWriteIsMissingDuringUpdate | {0} エンティティを更新するためのアクセス許可がありません。 |
90040103 | TablePermissionCreateIsMissing | {0} エンティティを作成するためのアクセス許可がありません。 |
90040104 | TablePermissionCreateIsMissing | {0) エンティティを削除するためのアクセス許可がありません。 |
90040105 | TablePermissionAppendIsMissngDuringAssociationChange | テーブル {0} の {1} との関連付けまたは関連付けの解除を行うためのアクセス許可がありません。 |
90040106 | TablePermissionAppendToIsMissingDuringAssociationChange | テーブル {1} の {0} への関連付けまたは関連付けの解除を行うためのアクセス許可がありません |
90040107 | HttpAntiForgeryException | 偽造防止 Cookie トークンとフォーム フィールド トークンが一致しません。 |
90040109 | MissingPortalSessionCookie | 無効なセッション トークンはスローするメソッドに渡されました。 |
9004010C | ResourceDoesNotExists | セグメント '{0}' のリソースが見つかりません。 |
9004010D | CDSError | CDS エラーが発生しました。 |
HTTP ステータス コード 500 の未処理エラーに対する応答は、"リクエストの処理中に予期しないエラーが発生しました" というエラーが返されます。