Jump to content

API:Extensions/ja: Difference between revisions

From mediawiki.org
Content deleted Content added
update
No edit summary
 
(30 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages />
<languages />
{{ExtensionTypes}}
{{API}}
{{API}}
このドキュメントでは、MediaWiki 1.30またはそれ以降での、APIモジュールの作成を扱います。
このドキュメントでは、MediaWiki 1.30またはそれ以降での、APIモジュールの作成を扱います。
Line 10: Line 9:


; actionモジュール
; actionモジュール
: メインの<code>action</code>パラメーターに値を送るモジュールは必ず{{ll|Manual:ApiBase.php|ApiBase}}をサブクラス化します。 登録には <code>APIModules</code> キーを用いて、<code>extension.json</code> に記載すること。
: メインの <code>action</code> パラメーターに値を送るモジュールは必ず{{ll|Manual:ApiBase.php|ApiBase}}をサブクラス化します。 登録には <code>APIModules</code> キーを用いて、<code>extension.json</code> に記載すること。
; 書式のモジュール
; 書式のモジュール
: メインの<code>format</code>パラメーターに値を送るモジュールは必ず{{class doclink|ApiFormatBase}}をサブクラス化します。 登録には<code>APIFormatModules</code>キーを用いて<code>extension.json</code>に記載のこと。 拡張機能に書式モジュールが必要な場合は非常にまれです。
: メインの<code>format</code>パラメーターに値を送るモジュールは必ず{{class doclink|ApiFormatBase}}をサブクラス化します。 登録には<code>APIFormatModules</code>キーを用いて<code>extension.json</code>に記載のこと。 拡張機能に書式モジュールが必要な場合は非常にまれです。
Line 27: Line 26:
(モジュールに関する説明文書を作成すると、この接頭辞が存在する場合にはモジュールの見出しにカッコ入りで表示されます。)
(モジュールに関する説明文書を作成すると、この接頭辞が存在する場合にはモジュールの見出しにカッコ入りで表示されます。)
ご利用のモジュールがクエリ用下位モジュールである場合、クライアントに正しい動作をさせるため接頭辞が必要です。接頭辞がないと、それぞれ固有のパラメーターを要する複数の下位モジュールを一度に作動させようとしてしまいます。
ご利用のモジュールがクエリ用下位モジュールである場合、クライアントに正しい動作をさせるため接頭辞が必要です。接頭辞がないと、それぞれ固有のパラメーターを要する複数の下位モジュールを一度に作動させようとしてしまいます。
action及びformatモジュールについては、接頭辞の付与はオプションです。
<span lang="en" dir="ltr" class="mw-content-ltr">For action and format modules, the prefix is optional.</span>


<span id="Parameters"></span>
<span id="Parameters"></span>
=== パラメーター ===
=== パラメーター ===

大半のモジュールにはパラメーターが必要です。
大半のモジュールにはパラメーターが必要です。
これらは {{method doclink|class=ApiBase|anchor=a6806d2768e2bf6ea57e6b081bf4a9f9f|method=getAllowedParams()}} を実装することで定義されます。
これらは {{method doclink|class=ApiBase|anchor=a6806d2768e2bf6ea57e6b081bf4a9f9f|method=getAllowedParams()}} を実装することで定義されます。
Line 79: Line 77:
=== 実行と出力 ===
=== 実行と出力 ===
モジュールを実行するコードは {{method doclink|class=ApiBase|anchor=ae83afac8fb010e6793d3b56b20ea3634|method=execute()}} メソッドを実装します。
モジュールを実行するコードは {{method doclink|class=ApiBase|anchor=ae83afac8fb010e6793d3b56b20ea3634|method=execute()}} メソッドを実装します。
一般的にこのコードは {{method doclink|class=ApiBase|anchor=a6b85aa1e5834633f61e93cf55c5e201a|method=$this->extractRequestParams()}} を使用して入力パラメーターを取得し、出力を追加するためには {{method doclink|class=ApiBase|anchor=a96d0df60d0011839ba26dd81b5e7d49f|method=$this->getResult()}} を使用してオブジェクト {{class doclink|ApiResult}} を取得します。
一般的にこのコードは {{method doclink|class=ApiBase|anchor=a6b85aa1e5834633f61e93cf55c5e201a|method=$this&rarr;extractRequestParams()}} を使用して入力パラメーターを取得し、出力を追加するためには {{method doclink|class=ApiBase|anchor=a96d0df60d0011839ba26dd81b5e7d49f|method=$this&rarr;getResult()}} を使用してオブジェクト {{class doclink|ApiResult}} を取得します。


クエリ属性の下位モジュールには {{method doclink|class=ApiQueryBase|anchor=ac7b9a6c6566ffd4064ec79aa9667d604|method=$this->getPageSet()}} を用いて、操作するページ群のセットにアクセスします。
クエリ属性の下位モジュールには {{method doclink|class=ApiQueryBase|anchor=ac7b9a6c6566ffd4064ec79aa9667d604|method=$this&rarr;getPageSet()}} を用いて、操作するページ群のセットにアクセスします。


ジェネレーターとして使用可能なクエリ下位モジュールの場合も、{{method doclink|class=ApiQueryGeneratorBase|anchor=a055850e5d4d516335d47e6c65e3f80c7|method=executeGenerator()}} の実行が必要で、生成したページ名を入力する {{class doclink|ApiPageSet}} を渡します。
ジェネレーターとして使用可能なクエリ下位モジュールの場合も、{{method doclink|class=ApiQueryGeneratorBase|anchor=a055850e5d4d516335d47e6c65e3f80c7|method=executeGenerator()}} の実行が必要で、生成したページ名を入力する {{class doclink|ApiPageSet}} を渡します。
Line 89: Line 87:
=== キャッシュ ===
=== キャッシュ ===
API のレスポンスは既定ではキャッシュの対象外です ('Cache-Control: private')!
API のレスポンスは既定ではキャッシュの対象外です ('Cache-Control: private')!
{{tmpl|0=<span class="mw-translate-fuzzy">action モジュールにおいて $1 を呼び出すとキャッシュの実行を承認できます。</span>
{{tmpl|0=action モジュールにおいて $1 を呼び出すとキャッシュの実行を承認できます。
|1={{method doclink|class=ApiMain|anchor=a78e3bc4e4e78f4b970fd4cf8bd63bf17|method=$this->getMain()->setCacheMode()}}
|1={{method doclink|class=MediaWiki\Api\ApiMain|anchor=a78e3bc4e4e78f4b970fd4cf8bd63bf17|method=$this&rarr;getMain()&rarr;setCacheMode()}}
}}
}}
その場合にも、キャッシュを実際に有効にするにはクライアントが <code>maxage</code> または <code>smaxage</code> パラメーターを渡す必要があります。
その場合にも、キャッシュを実際に有効にするにはクライアントが <code>maxage</code> または <code>smaxage</code> パラメーターを渡す必要があります。
{{tmpl|0=<span class="mw-translate-fuzzy">$1 を呼ぶと強制キャッシュも可能です。</span>
{{tmpl|0=$1 を呼ぶと強制キャッシュも可能です。
|1={{method doclink|class=ApiMain|anchor=a4c4c7cd83f170bdc7ef1b35b9b31815c|method=$this->getMain()->setCacheMaxAge()}}
|1={{method doclink|class=MediaWiki\Api\ApiMain|anchor=a4c4c7cd83f170bdc7ef1b35b9b31815c|method=$this&rarr;getMain()&rarr;setCacheMaxAge()}}
}}
}}


クエリ モジュールでは、これらのモジュールの呼び出しは''禁止''です。
クエリ モジュールでは、これらのモジュールの呼び出しは''禁止''です。
その代わりに、{{method doclink|class=ApiQueryBase|anchor=a42ee449eb4a66e1d58a6867cc9949b6d|method=getCacheMode()}} を実装するとキャッシュできます。
その代わりに、{{method doclink|class=MediaWiki\Api\ApiQueryBase|anchor=a42ee449eb4a66e1d58a6867cc9949b6d|method=getCacheMode()}} を実装するとキャッシュできます。


いずれの場合にも、個人特定情報をさらさないようにご注意ください。
いずれの場合にも、個人特定情報をさらさないようにご注意ください。


{{anchor|Edit token}}
{{anchor|Edit token}}

<span id="Token_handling"></span>
<span id="Token_handling"></span>
=== トークンの処理 ===
=== トークンの処理 ===
Line 111: Line 110:
コアに含まれるトークンではなく、独自の権限チェックでカスタム トークンを使用したい場合は、そのトークンを {{ll|Manual:Hooks/ApiQueryTokensRegisterTypes|ApiQueryTokensRegisterTypes}} フックを使用して登録します。
コアに含まれるトークンではなく、独自の権限チェックでカスタム トークンを使用したい場合は、そのトークンを {{ll|Manual:Hooks/ApiQueryTokensRegisterTypes|ApiQueryTokensRegisterTypes}} フックを使用して登録します。


<span id="Master_database_access"></span>
<span id="Primary_database_access"></span>
=== マスターデータベースへのアクセス ===
=== マスターデータベースへのアクセス ===


Line 121: Line 120:
{{class doclink|ApiBase}}にはさまざまな点検のために、次の例のような複数の方式があります。
{{class doclink|ApiBase}}にはさまざまな点検のために、次の例のような複数の方式があります。


* 一連のパラメーターのうち正確に 1 つが指定されたことを保証する必要がある場合は、{{method doclink|class=ApiBase|anchor=a81a26db54952ce2a02629ab1d65e87d4|method=$this->requireOnlyOneParameter()}} を使用します。
* 一連のパラメーターのうち正確に 1 つが指定されたことを保証する必要がある場合は、{{method doclink|class=ApiBase|anchor=a81a26db54952ce2a02629ab1d65e87d4|method=$this&rarr;requireOnlyOneParameter()}} を使用します。
<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* If you need to assert that at most one of a set of parameters was supplied, use {{method doclink|class=ApiBase|anchor=adca930631ca838b84e402ce9fcffb5fb|method=$this->requireMaxOneParameter()}}.
* If you need to assert that at most one of a set of parameters was supplied, use {{method doclink|class=ApiBase|anchor=adca930631ca838b84e402ce9fcffb5fb|method=$this&rarr;requireMaxOneParameter()}}.
</div>
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* If you need to assert that at least one of a set of parameters was supplied, use {{method doclink|class=ApiBase|anchor=a507bca3c16b51e1c8d470bf476c74d57|method=$this->requireAtLeastOneParameter()}}.
* If you need to assert that at least one of a set of parameters was supplied, use {{method doclink|class=ApiBase|anchor=a507bca3c16b51e1c8d470bf476c74d57|method=$this&rarr;requireAtLeastOneParameter()}}.
</div>
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* If you need to assert that the user has certain rights, use {{method doclink|class=ApiBase|anchor=a22d8d8c969f0ff00d456299f5e2b4f0d|method=$this->checkUserRightsAny()}}.
* If you need to assert that the user has certain rights, use {{method doclink|class=ApiBase|anchor=a22d8d8c969f0ff00d456299f5e2b4f0d|method=$this&rarr;checkUserRightsAny()}}.
</div>
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* If you need to assert that the user can take an action on a particular page, use {{method doclink|class=ApiBase|anchor=ad3b21a9509e233445daba1c01ea91d66|method=$this->checkTitleUserPermissions()}}.
* If you need to assert that the user can take an action on a particular page, use {{method doclink|class=ApiBase|anchor=ad3b21a9509e233445daba1c01ea91d66|method=$this&rarr;checkTitleUserPermissions()}}.
</div>
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* If the user is blocked (and that matters to your module), pass the <code>Block</code> object to {{method doclink|class=ApiBase|anchor=ad92de7109c0e20ad60867f0b3edf6119|method=$this->dieBlocked()}}.
* If the user is blocked (and that matters to your module), pass the <code>Block</code> object to {{method doclink|class=ApiBase|anchor=ad92de7109c0e20ad60867f0b3edf6119|method=$this&rarr;dieBlocked()}}.
</div>
</div>


それでもなお、自分自身のエラーに対処する必要に迫られる事例にしばしば出会います。
それでもなお、自分自身のエラーに対処する必要に迫られる事例にしばしば出会います。
通常の対処方法では {{method doclink|class=ApiBase|anchor=a66ea5959af0a75c62c90be5dff929d6c|method=$this->dieWithError()}} を呼び出しますが、代替手段としてエラー情報に関する <code>StatusValue</code> を入手し、{{method doclink|class=ApiBase|anchor=accf0611ad0fc51983d2d24adf92598f7|method=$this->dieStatus()}} に渡すことができます。
通常の対処方法では {{method doclink|class=ApiBase|anchor=a66ea5959af0a75c62c90be5dff929d6c|method=$this&rarr;dieWithError()}} を呼び出しますが、代替手段としてエラー情報に関する <code>StatusValue</code> を入手し、{{method doclink|class=ApiBase|anchor=accf0611ad0fc51983d2d24adf92598f7|method=$this&rarr;dieStatus()}} に渡すことができます。


エラーメッセージではなく警告を発するには、{{method doclink|class=ApiBase|anchor=a15ccc78c9787528c4f2b630d6a2d1517|method=$this->addWarning()}} を使用し、廃止を予告するには {{method doclink|class=ApiBase|anchor=aff281f11c4f17798fcbef8c2697af92a|method=$this->addDeprecation()}} を使用します。
エラーメッセージではなく警告を発するには、{{method doclink|class=ApiBase|anchor=a15ccc78c9787528c4f2b630d6a2d1517|method=$this&rarr;addWarning()}} を使用し、廃止を予告するには {{method doclink|class=ApiBase|anchor=aff281f11c4f17798fcbef8c2697af92a|method=$this&rarr;addDeprecation()}} を使用します。


<span id="Documentation"></span>
<span id="Documentation"></span>
== 説明文書 ==
== 説明文書 ==

APIの説明文書にはMediaWikiのi18n地域化の仕組みが使われます。
APIの説明文書にはMediaWikiのi18n地域化の仕組みが使われます。
必要なメッセージは既定でモジュールの「パス」に基づいて命名されます。
必要なメッセージは既定でモジュールの「パス」に基づいて命名されます。
actionとformatモジュールに対しては、パスはモジュールの登録時の名称が使われます。
actionとformatモジュールに対しては、パスはモジュールの登録時の名称が使われます。
クエリの下位モジュールの接頭辞はquery+が採用されます。
クエリの下位モジュールの接頭辞は query+ が採用されます。


モジュールごとに <code>apihelp-''$path''-summary</code> メッセージを用意する必要があり、モジュールを1行で簡明に説明します。
モジュールごとに <code>apihelp-''$path''-summary</code> メッセージを用意する必要があり、モジュールを1行で簡明に説明します。
Line 157: Line 155:
API説明文書の詳細は {{ll|API:Localisation}} を参照してください。
API説明文書の詳細は {{ll|API:Localisation}} を参照してください。


ウィキメディアには、拡張機能が管理するその他のAPI説明文書があ場合あります。
拡張機能について、追加 API モジュールを mediawiki.org で 文書化すことできます。
拡張機能のメインページで探すか、空間がさらに必要な場合には <code>Extension:{{green|&lt;ExtensionName&gt;}}/API</code> という名前のページ、またはその下位ページを検索してください (例: {{ll|Extension:CentralAuth/API|CentralAuth}}、{{ll|Extension:MassMessage/API|MassMessage}}、{{ll|Extension:StructuredDiscussions/API|StructuredDiscussions}})。
拡張機能のメインページで探すか、空間がさらに必要な場合には {{tmpl|0=<code>Extension:&lt;$1>/API</code>|拡張機能名}} という名前のページ、またはその下位ページを検索してください (例: {{ll|Extension:CentralAuth/API|CentralAuth}}、{{ll|Extension:MassMessage/API|MassMessage}}、{{ll|Extension:StructuredDiscussions/API|StructuredDiscussions}})。
MediaWiki コアでは、API 用に API 名前空間が予約されています。
MediaWiki コアでは、API 用に API 名前空間が予約されています。


Line 166: Line 164:
MediaWiki 1.14以降、以下のフックを使うことで、コアモジュールの機能を拡張することができます:
MediaWiki 1.14以降、以下のフックを使うことで、コアモジュールの機能を拡張することができます:


* {{ll|Manual:Hooks/APIGetAllowedParams|APIGetAllowedParams}} - モジュールのパラメーター一覧を追加/修正する場合
* {{ll|Manual:Hooks/APIGetAllowedParams|APIGetAllowedParams}} モジュールのパラメーター一覧を追加/修正する場合
* {{ll|Manual:Hooks/APIGetParamDescription|APIGetParamDescription}} - モジュールのパラメーターに関する説明を追加/修正する場合
* {{ll|Manual:Hooks/APIGetParamDescriptionMessages|APIGetParamDescriptionMessages}} モジュールのパラメーターに関する説明を追加/修正する場合
* {{ll|Manual:Hooks/APIAfterExecute|APIAfterExecute}} - モジュールの実行後 (ただし結果出力の前) に何か処理をする場合
* {{ll|Manual:Hooks/APIAfterExecute|APIAfterExecute}} モジュールの実行後 (ただし結果出力の前) に何か処理をする場合
** <code>prop=</code>、<code>list=</code>、<code>meta=</code> モジュールには、{{ll|Manual:Hooks/APIQueryAfterExecute|APIQueryAfterExecute}} を使用します
** <code>prop=</code>、<code>list=</code>、<code>meta=</code> モジュールには、{{ll|Manual:Hooks/APIQueryAfterExecute|APIQueryAfterExecute}} を使用します
*** モジュールをジェネレーター モードで実行したい場合は代わりに {{ll|Manual:Hooks/APIQueryGeneratorAfterExecute|APIQueryGeneratorAfterExecute}} を呼び出します
*** モジュールをジェネレーター モードで実行したい場合は代わりに {{ll|Manual:Hooks/APIQueryGeneratorAfterExecute|APIQueryGeneratorAfterExecute}} を呼び出します
Line 179: Line 177:
<span id="Testing_your_extension"></span>
<span id="Testing_your_extension"></span>
== 拡張機能の試験 ==
== 拡張機能の試験 ==

* [{{SERVER}}{{SCRIPTPATH}}/api.php api.php] を開き、ご利用のモジュールに対して作成されたヘルプまたはクエリの下位モジュールへ移動します。 ご利用の拡張機能のヘルプ情報が正しいかどうか、確認する必要があります。
* [{{SERVER}}{{SCRIPTPATH}}/api.php api.php] を開き、ご利用のモジュールに対して作成されたヘルプまたはクエリの下位モジュールへ移動します。 ご利用の拡張機能のヘルプ情報が正しいかどうか、確認する必要があります。
** <code>getExamplesMessages()</code> で提供したサンプルURL群が「例」に表示されるので、クリックします。
** <code>getExamplesMessages()</code> で提供したサンプルURL群が「例」に表示されるので、クリックします。
Line 186: Line 183:
* ご利用の拡張機能に関するその他の情報は、次のリンク先を開いて確認します。$api
* ご利用の拡張機能に関するその他の情報は、次のリンク先を開いて確認します。$api
{{ApiEx|p1=action=paraminfo |p2=modules=myext}}
{{ApiEx|p1=action=paraminfo |p2=modules=myext}}

{{Extension development}}


[[Category:Extension creation{{#translation:}}]]
[[Category:Extension creation{{#translation:}}]]

Latest revision as of 11:48, 7 February 2026

このドキュメントでは、MediaWiki 1.30またはそれ以降での、APIモジュールの作成を扱います。

モジュールの作成と登録

すべての API モジュールは ApiBase のサブクラスですが、派生したベースクラスを使用するタイプのモジュールもあります。 登録の方法もまた、モジュールのタイプに依存します。

actionモジュール
メインの action パラメーターに値を送るモジュールは必ずApiBase をサブクラス化します。 登録には APIModules キーを用いて、extension.json に記載すること。
書式のモジュール
メインのformatパラメーターに値を送るモジュールは必ずApiFormatBaseをサブクラス化します。 登録にはAPIFormatModulesキーを用いてextension.jsonに記載のこと。 拡張機能に書式モジュールが必要な場合は非常にまれです。
クエリの下位モジュール
action=queryproplistmeta のパラメーターの値を渡すモジュールは、必ず ApiQueryBase (ジェネレーターとして使用できない場合) または ApiQueryGeneratorBase (ジェネレーターとして使用可能な場合) をサブクラス化します。 APIPropModulesAPIListModulesもしくはAPIMetaModulesのキーを用いて、必ずextension.jsonに記載します。

どの場合も、登録キーの値はモジュール名を備えたオブジェクト (つまり属性の値) をキーに用い、クラス名はその値とします。 モジュールの登録は条件付で (actionとformatモジュールには) ApiMain::moduleManager と (クエリの下位モジュールには) ApiQuery::moduleManager を用います。

実装

接頭辞

ご利用のAPIモジュールのコンストラクタ関数では、parent::__construct()を呼び出すときにオプションとしてモジュールのパラメーターに接頭辞を指定できます。 (モジュールに関する説明文書を作成すると、この接頭辞が存在する場合にはモジュールの見出しにカッコ入りで表示されます。) ご利用のモジュールがクエリ用下位モジュールである場合、クライアントに正しい動作をさせるため接頭辞が必要です。接頭辞がないと、それぞれ固有のパラメーターを要する複数の下位モジュールを一度に作動させようとしてしまいます。 action及びformatモジュールについては、接頭辞の付与はオプションです。

パラメーター

大半のモジュールにはパラメーターが必要です。 これらは getAllowedParams() を実装することで定義されます。 戻り値は、キーに(接頭辞のない)パラメーター名を取り、値はパラメータのスカラー既定値か、もしくはApiBaseが規定するPARAM_*定数を用いてパラメータのプロパティを定義する配列のいずれかとなります。

サンプルには構文ならびに比較的よく見かけるPARAM_*定数を示します。

	protected function getAllowedParams() {
		return [
			// 既定値のあるオプションのパラメータ
			'simple' => 'value',

			// 必須パラメータ
			'required' => [
				ApiBase::PARAM_TYPE => 'string',
				ApiBase::PARAM_REQUIRED => true,
			],

			// 一覧から複数値を受けるパラメータ
			'variable' => [
				// 値の既定セット
				ApiBase::PARAM_DFLT => 'foo|bar|baz',
				// 許容される値
				ApiBase::PARAM_TYPE => [ 'foo', 'bar', 'baz', 'quux', 'fred', 'blah' ],
				// 複数値を受けることがわかる
				ApiBase::PARAM_ISMULTI => true,
				// 標準の「値単位の」説明メッセージを使用してください
				ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
			],

			// 標準の「制限」パラメータ。一般的に、この標準から逸脱することは推奨されません。
			'limit' => [
				ApiBase::PARAM_DFLT => 10,
				ApiBase::PARAM_TYPE => 'limit',
				ApiBase::PARAM_MIN => 1,
				ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
				ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
			],
		];
	}

パラメータの説明文書はMediaWikiのi18nの仕組み(地域化)に従います。詳細は#説明文書節を参照してください。

実行と出力

モジュールを実行するコードは execute() メソッドを実装します。 一般的にこのコードは $this→extractRequestParams() を使用して入力パラメーターを取得し、出力を追加するためには $this→getResult() を使用してオブジェクト ApiResult を取得します。

クエリ属性の下位モジュールには $this→getPageSet() を用いて、操作するページ群のセットにアクセスします。

ジェネレーターとして使用可能なクエリ下位モジュールの場合も、executeGenerator() の実行が必要で、生成したページ名を入力する ApiPageSet を渡します。 この事例では一般的に、ApiResult を使用すべきではありません

キャッシュ

API のレスポンスは既定ではキャッシュの対象外です ('Cache-Control: private')! action モジュールにおいて $this→getMain()→setCacheMode() を呼び出すとキャッシュの実行を承認できます。 その場合にも、キャッシュを実際に有効にするにはクライアントが maxage または smaxage パラメーターを渡す必要があります。 $this→getMain()→setCacheMaxAge() を呼ぶと強制キャッシュも可能です。

クエリ モジュールでは、これらのモジュールの呼び出しは禁止です。 その代わりに、getCacheMode() を実装するとキャッシュできます。

いずれの場合にも、個人特定情報をさらさないようにご注意ください。

トークンの処理

程度に関わらずご利用のactionモジュールによりウィキに変更が加えられる場合は、トークンに類するものを備える必要があります。 この処理を自動化するには needsToken() メソッドを実行すると、ご利用のモジュールに必要なトークンを返します。(おそらく 'csrf' として 編集トークンを出力。) するとクライアントが token パラメーターを要求する API に対して提供するトークンは、API ベースコードによって自動的に検証されます。

コアに含まれるトークンではなく、独自の権限チェックでカスタム トークンを使用したい場合は、そのトークンを ApiQueryTokensRegisterTypes フックを使用して登録します。

マスターデータベースへのアクセス

ご利用のモジュールがマスターデータベースにアクセスする場合、true 値を返すために isWriteMode() メソッドを実装する必要があります。

エラーを返す

ApiBaseにはさまざまな点検のために、次の例のような複数の方式があります。

  • 一連のパラメーターのうち正確に 1 つが指定されたことを保証する必要がある場合は、$this→requireOnlyOneParameter() を使用します。
  • If the user is blocked (and that matters to your module), pass the Block object to $this→dieBlocked().

それでもなお、自分自身のエラーに対処する必要に迫られる事例にしばしば出会います。 通常の対処方法では $this→dieWithError() を呼び出しますが、代替手段としてエラー情報に関する StatusValue を入手し、$this→dieStatus() に渡すことができます。

エラーメッセージではなく警告を発するには、$this→addWarning() を使用し、廃止を予告するには $this→addDeprecation() を使用します。

説明文書

APIの説明文書にはMediaWikiのi18n地域化の仕組みが使われます。 必要なメッセージは既定でモジュールの「パス」に基づいて命名されます。 actionとformatモジュールに対しては、パスはモジュールの登録時の名称が使われます。 クエリの下位モジュールの接頭辞は query+ が採用されます。

モジュールごとに apihelp-$path-summary メッセージを用意する必要があり、モジュールを1行で簡明に説明します。 さらにヘルプ テキストを設ける場合には apihelp-$path-extended-description を作成できます。 パラメーターごとに apihelp-$path-param-$name メッセージを用意し、PARAM_HELP_MSG_PER_VALUE を用いるパラメーターにも値ごとに apihelp-$path-paramvalue-$name-$value を用意します。

API説明文書の詳細は API:地域化 を参照してください。

拡張機能について、追加の API モジュールを mediawiki.org で 文書化することもできます。 拡張機能のメインページで探すか、空間がさらに必要な場合には Extension:<拡張機能名>/API という名前のページ、またはその下位ページを検索してください (例: CentralAuth MassMessage StructuredDiscussions )。 MediaWiki コアでは、API 用に API 名前空間が予約されています。

コアモジュールの拡張

MediaWiki 1.14以降、以下のフックを使うことで、コアモジュールの機能を拡張することができます:

API機能を備えた拡張機能の一覧

API を追加/拡張する拡張機能の例は カテゴリ:API 拡張機能 を参照してください。

拡張機能の試験

  • api.php を開き、ご利用のモジュールに対して作成されたヘルプまたはクエリの下位モジュールへ移動します。 ご利用の拡張機能のヘルプ情報が正しいかどうか、確認する必要があります。
    • getExamplesMessages() で提供したサンプルURL群が「例」に表示されるので、クリックします。
    • クエリ文字列中のURLパラメータを除去したり文字列を一部削除して、拡張機能の反応を試します。
  • Special:ApiSandboxを開き、ご利用のAPIをインタラクティブに試用します。
  • ご利用の拡張機能に関するその他の情報は、次のリンク先を開いて確認します。$api