インストール

モジュールをインストールします

  1. npm install @wordpress/api-fetch --save

このパッケージは、あなたのコードがES2015+環境で実行されることを前提としています。そのような言語機能やAPIのサポートが限られているか、まったくない環境を使用している場合は、コードに@wordpress/babel-preset-defaultで提供されるポリフィルを含める必要があります。

使用法

GET

  1. import apiFetch from '@wordpress/api-fetch';
  2. apiFetch( { path: '/wp/v2/posts' } ).then( ( posts ) => {
  3. console.log( posts );
  4. } );

クエリ引数付きGET

  1. import apiFetch from '@wordpress/api-fetch';
  2. import { addQueryArgs } from '@wordpress/url';
  3. const queryParams = { include: [1,2,3] }; // Return posts with ID = 1,2,3.
  4. apiFetch( { path: addQueryArgs( '/wp/v2/posts', queryParams ) } ).then( ( posts ) => {
  5. console.log( posts );
  6. } );

POST

  1. apiFetch( {
  2. path: '/wp/v2/posts/1',
  3. method: 'POST',
  4. data: { title: 'New Post Title' },
  5. } ).then( ( res ) => {
  6. console.log( res );
  7. } );

オプション

  1. さらに、以下のオプションが利用可能です:
  2. #### path (文字列)
  3. `````url`````の代わりに使用されるショートハンドで、現在のサイトのREST APIルートURLに追加されます。
  4. #### url (文字列)
  5. 取得するエンドポイントへの絶対URL
  6. #### parse (ブール値、デフォルトはtrue)
  7. `````fetch`````とは異なり、`````Promise``````````apiFetch`````の戻り値は解析されたJSON結果に解決されます。この動作を無効にするには、`````parse``````````false`````として渡します。
  8. #### data (オブジェクト)
  9. `````POST`````または`````PUT`````リクエストのみに送信されます。`````body`````の代わりに使用されるショートハンドで、JSONに文字列化されるオブジェクト値を受け入れます。
  10. <a name="aborting-a-request"></a>
  11. ### リクエストの中止
  12. リクエストの中止は、ネイティブの`````fetch````` APIを使用するのと同じ方法で[`````AbortController`````](https://developer.mozilla.org/en-US/docs/Web/API/AbortController)を使用することで達成できます。
  13. `````AbortController`````をサポートしていないレガシーブラウザの場合、次のいずれかを行うことができます:
  14. - 中止可能にしたい場合は、`````AbortController`````の独自のポリフィルを提供します。
  15. - 以下の例のように無視します。
  16. **例**
  17. ``````bash
  18. const controller =
  19. typeof AbortController === 'undefined' ? undefined : new AbortController();
  20. apiFetch( { path: '/wp/v2/posts', signal: controller?.signal } ).catch(
  21. ( error ) => {
  22. // If the browser doesn't support AbortController then the code below will never log.
  23. // However, in most cases this should be fine as it can be considered to be a progressive enhancement.
  24. if ( error.name === 'AbortError' ) {
  25. console.log( 'Request has been aborted' );
  26. }
  27. }
  28. );
  29. controller?.abort();
  30. `

ミドルウェア

  1. **例**
  2. ``````bash
  3. import apiFetch from '@wordpress/api-fetch';
  4. apiFetch.use( ( options, next ) => {
  5. const start = Date.now();
  6. const result = next( options );
  7. result.then( () => {
  8. console.log( 'The request took ' + ( Date.now() - start ) + 'ms' );
  9. } );
  10. return result;
  11. } );
  12. `

組み込みミドルウェア

  1. **Nonceミドルウェア**
  2. ``````bash
  3. import apiFetch from '@wordpress/api-fetch';
  4. const nonce = 'nonce value';
  5. apiFetch.use( apiFetch.createNonceMiddleware( nonce ) );
  6. `
  1. **ルートURLミドルウェア**
  2. ``````bash
  3. import apiFetch from '@wordpress/api-fetch';
  4. const rootURL = 'http://my-wordpress-site/wp-json/';
  5. apiFetch.use( apiFetch.createRootURLMiddleware( rootURL ) );
  6. `

カスタムフェッチハンドラー

  1. **例**
  2. 以下の例では、[`````axios`````](https://github.com/axios/axios)を使用してすべてのリクエストを行うためのカスタムフェッチハンドラーを使用しています。
  3. ``````bash
  4. import apiFetch from '@wordpress/api-fetch';
  5. import axios from 'axios';
  6. apiFetch.setFetchHandler( ( options ) => {
  7. const { url, path, data, method } = options;
  8. return axios( {
  9. url: url || path,
  10. method,
  11. data,
  12. } );
  13. } );
  14. `

このパッケージへの貢献

これはGutenbergプロジェクトの一部である個別のパッケージです。このプロジェクトはモノレポとして整理されています。特定の目的を持つ複数の自己完結型ソフトウェアパッケージで構成されています。このモノレポ内のパッケージは、https://www.npmjs.com/に公開され、https://make.wordpress.org/core/や他のソフトウェアプロジェクトで使用されています。

このパッケージやGutenberg全体への貢献について詳しく知りたい場合は、プロジェクトの主要なhttps://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.mdをお読みください。