WebApi: makeRequest()
HTTP メソッドとパラメタから HTTP リクエストを作成します。
このメソッドはオーバーライド可能です。
概要
このメソッドは WebApi の HTTP 対応メソッドがリクエストオブジェクトを作成するのために呼び出されます。つまり、このメソッドをオーバーライドすることでリクエストオブジェクトをカスタマイズできます。
既定の動作は各メソッドを参照してください。
構文
webApi.makeRequest(method, params) => object
引数
-
method:"GET"|"PUT"|"POST"|"DELETE"|"HEAD"|"OPTIONS"|"PATCH"リクエストの HTTP メソッドです。
-
params:object各メソッドの引数に渡されたパラメタです。
返値: object
少なくとも次のプロパティを持つリクエストオブジェクトです。
-
url:stringリクエストを送信する対象の URL です。
-
method:"GET"|"PUT"|"POST"|"DELETE"|"HEAD"|"OPTIONS"|"PATCH"リクエストの HTTP メソッドです。
-
headers:objectリクエストに付与するヘッダを列挙したオブジェクトです。各プロパティの値はすべて文字列です。
-
body:string|FromData|nullリクエストのボディです。
これらに加えて、fetch() に渡すオプションがあれば、それらがプロパティとして含まれます。
例
HTTP メソッド POST が渡されたとき、既定ではパラメタはボディに挿入されますが、クエリに挿入するように変更してみます。
class PostQuery extends WebApi {
makeRequest(method, params) {
const request = super.makeRequest(method, params);
if (method !== "POST") {
return request;
}
const body = request.body;
request.body = "{}";
const queries = [];
for (const [key, value] of Object.entries(JSON.parse(body))) {
queries.push(`${key}=${JSON.stringify(value)}`);
}
let query = "";
if (queries.length > 0) {
query = "?" + queries.join("&");
}
request.url += query;
return request;
}
}
const api = new PostQuery({ host: "https://example.com", path: "/api/" });
const response = await api.post({ foo: "bar" });
// => https://example.com/api/?foo=bar
この例を実行すると、既定ではボディに挿入される JSON 文字列 {"foo":"bar"} がクエリ ?foo=bar として URL に追加されます。