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 に追加されます。