応答のフェッチ :スコープ対象、グローバル
Fetch Response API は、新しい Response オブジェクトを作成するためのメソッドと、Fetch Request API メソッドによって作成された応答本文を処理するためのメソッドを提供します。
- フェッチ:fetch(文字列、リソース、オブジェクトオプション):ネットワークからリソースをフェッチするプロセスを開始します。
- ヘッダーのフェッチ :スコープ対象、グローバル:要求と応答のヘッダーを取得して変更します。
- 要求のフェッチ :スコープ対象、グローバル:新しい要求オブジェクトを作成します。
- RequestInit のフェッチ:スコープ対象、グローバル:フェッチ要求を構成するオプションを設定します。
- 応答のフェッチ :スコープ対象、グローバル:新しい応答オブジェクトを作成します。
フェッチアクションをサポートするために、システムプロパティ glide.hosts.allowlist では、fetch メソッドがアクセスできるホストを制御できます。これは、 RestMessageV2 や上記のような HTTP API に適用されます。glide.hosts.allowlist の詳細については、「Available system properties」を参照してください。
応答プロパティ
応答 API は、HTTP 応答の詳細を返すプロパティを提供します。これらのプロパティを使用すると、メタデータ ( ステータス、 ヘッダー、 タイプなど) と応答本文 (本文) にアクセスしてさらに処理できます。これにより、要求の成功 (OK) を確認し、返されたデータをさまざまな形式 (JSON やテキストなど) で解析できます。これらのプロパティは、クライアント側アプリケーションでサーバー応答を検証および処理するために重要です。各プロパティの詳細については、「 https://developer.mozilla.org/en-US/docs/Web/API/Response」を参照してください。
| プロパティ名 | 説明 | 例 |
|---|---|---|
| 本文 | 準備完了。応答本文のコンテンツに読み取り可能なバイト データのストリームが含まれます。 有効な値:ReadableStream または null。 データタイプ:文字列 |
|
| bodyUsed | 準備完了。本文がまだ読まれたかどうかを示すフラグ。 指定できる値:
データタイプ:ブーリアン |
|
| ヘッダー | 読み取り専用です。応答に関連付けられたヘッダーオブジェクト。 データタイプ:Headers オブジェクト |
|
| OK | 準備完了。応答が成功した (ステータスが 200 〜 299 の範囲) かどうかを示すフラグ。 指定できる値:
データタイプ:ブーリアン |
|
| リダイレクト | 読み取り専用です。応答が要求がリダイレクトされた結果であるかどうかを示すフラグ。 指定できる値:
データタイプ:ブーリアン |
|
| ステータス | 読み取り専用です。応答の HTTP ステータスコード。たとえば、成功した場合は 200 です。 データタイプ:数値 |
|
| ステータステキスト | 読み取り専用です。response.status の HTTP ステータスコードに対応するステータスメッセージ。たとえば、ステータスコードが 200 の場合、Continue が 100、404 が Not Found の場合、これは問題ありません。データタイプ:文字列 |
|
| type | 読み取り専用です。応答のタイプ。 指定できる値:
データタイプ:文字列 |
|
| URL | 読み取り専用です。応答の URL。 データタイプ:文字列 |
|
応答をフェッチ:応答 (オブジェクト本体、オブジェクトオプション)
Response() コンストラクタを使用して新しい Response オブジェクトを作成します。
| 名前 | タイプ | 説明 |
|---|---|---|
| body | オブジェクト | オプション。応答の本文を定義するオブジェクト。 有効なタイプ:
デフォルト:null |
| オプション | オブジェクト | オプション。応答に適用するカスタム設定を含むオプションオブジェクト、または空のオブジェクト (デフォルト値)。可能なオプションは:
|
この例では、コンストラクターを使用して新しい Response オブジェクトを作成し、新しい Blob を本文として渡し、カスタムの status オプションと statusText オプションを含む init オブジェクトを指定します。
const myBlob = new Blob();
const myOptions = { status: 200, statusText: "Status message!" };
const myResponse = new Response(myBlob, myOptions);
応答をフェッチ:arrayBuffer()
ArrayBuffer で解決する promise を返します。
arrayBuffer() メソッドは、画像、オーディオファイル、または処理が必要なその他のバイナリファイルなどのバイナリデータを扱う場合に便利です。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| オブジェクト | 汎用の生バイナリデータバッファを表す ArrayBuffer で解決する Promise。 |
| 例外 | 説明 |
|---|---|
| DOMException - AbortError | 要求が中断されたことを示す例外。 |
| タイプエラー | 次のいずれかの理由でスローされます。
|
| 範囲エラー | 関連する ArrayBuffer の作成中に問題が発生しました。たとえば、データサイズが大きすぎる場合などです。 |
- fetch():指定された URL からリソースをフェッチします。
- response.ok:応答ステータスが 200 〜 299 の範囲かどうかを確認します。
- arrayBuffer():応答本文を読み取り、汎用の固定長の生バイナリデータバッファを表すArrayBufferに変換します。
- Uint8Array: ArrayBuffer を、バイナリ データを簡単に操作するための型付き配列である Uint8Array に変換します。
javascriptCopy code// Simple API to fetch binary data and process it using arrayBuffer()asyncfunctionfetchBinaryData(url) {
try {
// Fetch the resource from the provided URLconst response = awaitfetch(url);
// Check if the response is successfulif (!response.ok) {
thrownewError(`HTTP error! Status: ${response.status}`);
}
// Convert the response body to an ArrayBufferconst arrayBuffer = await response.arrayBuffer();
// Process the ArrayBuffer (e.g., convert it to a typed array)const uint8Array = newUint8Array(arrayBuffer);
// Return the processed datareturn uint8Array;
} catch (error) {
console.error("Error fetching or processing binary data:", error);
throw error;
}
}
// Example usageconst binaryDataUrl = 'https://example.com/path/to/binary/data';
fetchBinaryData(binaryDataUrl)
.then((data) => {
console.log("Binary data as Uint8Array:", data);
// Further processing can be done here, e.g., rendering an image or playing audio
})
.catch((error) => {
console.error("Failed to fetch binary data:", error);
});応答をフェッチ:blob()
Blob で解決する Promise を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| オブジェクト | BLOB で解決する Promise。 |
| 例外 | 説明 |
|---|---|
| DOMException - AbortError | 要求が中断されたことを示す例外。 |
| タイプエラー | 次のいずれかの理由でスローされます。
|
- fetch(url):指定された URL からリソースをフェッチします。
- response.blob():応答本文をバイナリデータを表すBlobオブジェクトに変換します。
- URL.createObjectURL(blob):DOM で使用できる BLOB の一時 URL を生成します (イメージ ソースなど)。
- DOM への画像の追加: 画像要素を動的に作成し、BLOB URL をソースとして設定して、ドキュメント本文に追加します。
async function fetchBlob(url) {
try {
// Fetch the resource from the provided URL
const response = await fetch(url);
// Check if the response is successful
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
// Convert the response body to a Blob
const blob = await response.blob();
// Create a URL for the Blob and log it
const blobUrl = URL.createObjectURL(blob);
console.log("Blob URL:", blobUrl);
// For example, you can set it as the source of an image
const img = document.createElement('img');
img.src = blobUrl;
img.alt = "Fetched Blob Image";
document.body.appendChild(img);
} catch (error) {
console.error("Error fetching or processing blob:", error);
}
}
// Example usage with an image URL
const imageUrl = 'https://via.placeholder.com/150';
fetchBlob(imageUrl);
応答をフェッチ:bytes()
Uint8Array で解決する promise を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| オブジェクト | Uint8Array で解決する Promise。 |
| 例外 | 説明 |
|---|---|
| DOMException- AbortError | 要求が中断されました。 |
| タイプエラー | 次のいずれかの理由でスローされます。
|
| 範囲エラー | 関連する ArrayBuffer の作成中に問題が発生しました。たとえば、データサイズが大きすぎる場合などです。 |
次の例は、テキストファイルをフェッチし、本文を Uint8Array として返し、これを文字列にデコードする方法を示しています。
const response = await fetch("https://www.example.com/textfile.txt");
const textFile = await response.bytes();
const string = new TextDecoder().decode(textFile);
console.log(string);
応答をフェッチ:formData()
FormData オブジェクトで解決する promise を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| オブジェクト | FormData オブジェクトで解決する promise。 |
| 例外 | 説明 |
|---|---|
| DOMException- AbortError | 要求が中断されました。 |
| タイプエラー | 次のいずれかの理由でスローされます。
|
- 要求本文:
JSON.stringify()を使用して、URL エンコードされたパラメーターの代わりに JSON としてフォームデータを送信しました。 - Content-Type:
application/jsonに設定して、要求本文の形式を示します。
// Example of using Response.formData()
async function fetchFormData(url) {
try {
// Make a POST request to fetch the form data
const response = await fetch(url, {
method: 'POST',
body: JSON.stringify({
name: 'John Doe',
email: 'john.doe@example.com',
}),
headers: {
'Content-Type': 'application/json',
},
});
// Check if the response is successful
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
// Parse the response as FormData
const formData = await response.formData();
// Iterate through the FormData entries
for (const [key, value] of formData.entries()) {
console.log(`${key}: ${value}`);
}
} catch (error) {
console.error("Error fetching or processing form data:", error);
}
}
// Example usage
const formEndpoint = 'https://httpbin.org/post'; // Replace with your form endpoint
fetchFormData(formEndpoint);
出力:
name: John Doe
email: john.doe@example.com
応答をフェッチ:json()
本文テキストを JSON として解析した結果に解決される Promise を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| オブジェクト | JavaScript オブジェクトに解決される promise。このオブジェクトは、オブジェクト、アレイ、文字列、数値など、JSON で表すことができるものであれば何でもかまいません。 |
| 例外 | 説明 |
|---|---|
| DOMException- AbortError | 要求が中断されました。 |
| タイプエラー | 次のいずれかの理由でスローされます。
|
| 構文エラー | 応答本文を JSON として解析できません。 |
- fetch() は URL に GET リクエストを行います。
- response.okは、要求が成功したかどうかを確認します (ステータスコード 200 〜 299)。
- 成功すると、 response.json() が呼び出され、応答から JSON データが解析されます。
- 解析されたデータは、 コンソール API を使用してシステムログに記録されます。要求または解析中にエラーが発生した場合は、エラーがキャッチされ、ログに記録されます。
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(data => console.log(data))
.catch(error => console.error('Fetch error:', error));
応答をフェッチ:text()
応答本文を読み取り、プレーン文字列として返します。応答は常に UTF-8 を使用してデコードされます。
text() メソッドは、HTML、JSON (手動で処理する場合)、XML、またはプレーン文字列として扱われることを意図したプレーンテキストファイルなどのテキストデータを含む応答に役立ちます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| なし | UTF-8 で囲まれた文字列で解決される promise。 |
| 例外 | 説明 |
|---|---|
| DOMException- AbortError | 要求が中断されました。 |
| タイプエラー | 次のいずれかの理由でスローされます。
|
次の例は、サーバーがプレーンテキストを返すときに text() を使用する簡単な方法を示しています。これは応答の例です。
const response = awaitfetch('https://example.com/text-endpoint');
const text = await response.text();
console.log(text); // Outputs: Hello, world! This is a sample response.
出力:
Hello, world! This is a sample response.