ネットワーキング サービスの操作

NetworkRequest コンポーネントは、ArcGIS Online に対して ArcGIS REST API 呼び出しを行うことができます。このため、このコンポーネントには、JavaScript の XMLHttpRequest クラスの機能および cURL (クライアント URL) コマンド ライン ツールが組み込まれています。これにより、JavaScript Web アプリから QML ネイティブ アプリへのコードの移行が可能になります。

XMLHttpRequest から NetworkRequest への移行

次のサンプル コードは、JavaScript と AppStudio AppFramework の両方で同一の機能を示しています。これは、JavaScript から QML へコードを移行するときのガイドとして役立ちます。

このサンプル コードでは、JavaScript の XMLHttpRequest を使用して、ネットワーク リクエストを実行します。

var req = new XMLHttpRequest();
var url = "http://www.arcgis.com/sharing/rest?f=json"
req.open("GET", url, true);
req.onreadystatechange = function() {
    console.log("readyState: ", req.readyState);
    if (req.readyState !== 4) return;
    if (req.status !== 200) return;
    console.log("responseText: ", req.responseText);
}
req.send();

このサンプル コードでは、AppFramework の NetworkRequest を使用して、同じネットワーク リクエストを実行します。

NetworkRequest {
    id: req
    url: "http://www.arcgis.com/sharing/rest?f=json"
    onReadyStateChanged: {
        console.log("readyState: ", readyState);
        if (readyState !== 4) return;
        if (status !== 200) return;
        console.log("responseText: ", responseText);
    }
}
function test() {
    req.send();
}

ReadyState 列挙

readyState プロパティには列挙が設定され、可能性のあるプロパティ値を表す整数が示されます。XMLHttpRequest からの移行をしやすくするために、整数値、JavaScript state、または NetworkRequest state のいずれかをアプリで使用でき、この場合、動作には変更はありません。

整数値JavaScript stateNetworkRequest

0

UNSENT

ReadyStateUninitialized

1

OPENED

ReadyStateInitialized

2

HEADERS_RECEIVED

ReadyStateSending

3

読み込み中

ReadyStateProcessing

4

完了

ReadyStateComplete

ファイル処理

Web アプリとネイティブ アプリの主な違いは、Web アプリはファイル システムにアクセスできないのに対して、ネイティブ アプリはアクセスできることです。この違いは、XMLHttpRequest がファイルにアクセスできないのに対して、NetworkRequest がアクセスできる点に反映されています。Web アプリでファイル アクセス リクエストを実行するには、JavaScript ではなく cURL を使用する必要があります。

cURL を使用してファイルをアップロードするには、次のコードを実行する必要があります。

curl \
    -F title="My Code Sample"
    -F type="Code Sample"
    -F tags="Code Sample"
    -F file="@CodeSample.zip"
    -F token="${ARCGIS_ONLINE_TOKEN}"
    http://http://www.arcgis.com/sharing/rest/content/users/jsmith/addItem

NetworkRequest は、ファイル名の前に必要とされる文字を処理するために uploadPrefix プロパティを含んでいます。このプロパティのデフォルト値は @ であり、cURL との互換性を維持します。次のサンプル コードは、NetworkRequest を使用して複製された同じ動作を示しています。

property string user: "jsmith"
property string itemTitle: "My Code Sample"
property string itemType: "Code Sample"
property string itemTags: "Code, Sample"
property string itemFile: "CodeSample.zip"
property string token // ARCGIS_ONLINE_TOKEN
NetworkRequest {
    id: req    url: "http://www.arcgis.com/sharing/rest/content/users/%1/addItem".arg(user)
	function submit() {
        send( {
            "title": itemTitle,            "type": itemType,            "tags": itemTags,            "file": uploadPrefix + itemFile,            "token": token,            "f": "json"
        } );
    }
}

send メソッドに渡される JSON オブジェクトは、キーと値のディクショナリ マップが格納される JavaScript オブジェクトです。NetworkRequest の method プロパティはネットワーク リクエストの特性を表します。このプロパティが空白のままか、未定義の場合は、デフォルトで GET リクエストに設定されます。ファイルのアップロードが必要な場合、method プロパティは [POST] に設定されなければなりません。

デフォルトの Content-Type

ArcGIS REST API へのリクエストを簡略化するために、NetworkRequest では、Content-Type ヘッダーがデフォルトで application/x-www-form-urlencoded に設定されます。これは、ArcGIS Online REST API の使用時に必要とされます。また、この Content-Type は他の大部分の Web サイトに対しても使用できます。ただし、Amazon Web Services などの一部の特定の Web サイトについては、この設定をクリアする必要がある場合もあります。

networkRequest.headers["Content-Type"] = "";