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 無効 この応答は次のような種類のエラーの場合に発生します:
  • AccessDenied
  • AttributePermissionIsMissing
  • TablePermissionWriteIsMissingDuringUpdate
  • TablePermissionCreateIsMissing
  • TablePermissionCreateIsMissing
  • TablePermissionAppendIsMissngDuringAssociationChange
  • TablePermissionAppendIsMissngDuringAssociationChange
クライアント エラー
401 未承認 この応答は次のような種類のエラーの場合に発生します。
  • MissingPortalRequestVerificationToken
  • MissingPortalSessionCookie
クライアント エラー
413 ペイロードが大きすぎます この応答は要求の長さが長すぎるときに発生します。 クライアント エラー
400 不正なリクエスト この応答は引数が無効である場合に発生します。
InvalidAttribute
クライアント エラー
404 見つかりません この応答はリソースが存在しない場合に発生します。
Web API について、テーブルは公開されていません。
クライアント エラー
405 許可されていないメソッド このエラーは、メソッドとリソースの組み合わせが正しくない場合に発生します。 たとえば、DELETE または PATCH をテーブルのコレクションに対して使用することはできません。 この状況は次のような種類のエラーの場合に発生する可能性があります。
  • InvalidOperation
  • NotSupported
クライアント エラー
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 の未処理エラーに対する応答は、"リクエストの処理中に予期しないエラーが発生しました" というエラーが返されます。

参照