API:Extensions/ja: Difference between revisions
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 |
一般的にこのコードは {{method doclink|class=ApiBase|anchor=a6b85aa1e5834633f61e93cf55c5e201a|method=$this→extractRequestParams()}} を使用して入力パラメーターを取得し、出力を追加するためには {{method doclink|class=ApiBase|anchor=a96d0df60d0011839ba26dd81b5e7d49f|method=$this→getResult()}} を使用してオブジェクト {{class doclink|ApiResult}} を取得します。 |
||
クエリ属性の下位モジュールには {{method doclink|class=ApiQueryBase|anchor=ac7b9a6c6566ffd4064ec79aa9667d604|method=$this |
クエリ属性の下位モジュールには {{method doclink|class=ApiQueryBase|anchor=ac7b9a6c6566ffd4064ec79aa9667d604|method=$this→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= |
{{tmpl|0=action モジュールにおいて $1 を呼び出すとキャッシュの実行を承認できます。 |
||
|1={{method doclink|class=ApiMain|anchor=a78e3bc4e4e78f4b970fd4cf8bd63bf17|method=$this |
|1={{method doclink|class=MediaWiki\Api\ApiMain|anchor=a78e3bc4e4e78f4b970fd4cf8bd63bf17|method=$this→getMain()→setCacheMode()}} |
||
}} |
}} |
||
その場合にも、キャッシュを実際に有効にするにはクライアントが <code>maxage</code> または <code>smaxage</code> パラメーターを渡す必要があります。 |
その場合にも、キャッシュを実際に有効にするにはクライアントが <code>maxage</code> または <code>smaxage</code> パラメーターを渡す必要があります。 |
||
{{tmpl|0= |
{{tmpl|0=$1 を呼ぶと強制キャッシュも可能です。 |
||
|1={{method doclink|class=ApiMain|anchor=a4c4c7cd83f170bdc7ef1b35b9b31815c|method=$this |
|1={{method doclink|class=MediaWiki\Api\ApiMain|anchor=a4c4c7cd83f170bdc7ef1b35b9b31815c|method=$this→getMain()→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=" |
<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 |
* 一連のパラメーターのうち正確に 1 つが指定されたことを保証する必要がある場合は、{{method doclink|class=ApiBase|anchor=a81a26db54952ce2a02629ab1d65e87d4|method=$this→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 |
* 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()}}. |
||
</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 |
* 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()}}. |
||
</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 |
* If you need to assert that the user has certain rights, use {{method doclink|class=ApiBase|anchor=a22d8d8c969f0ff00d456299f5e2b4f0d|method=$this→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 |
* 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()}}. |
||
</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 |
* 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()}}. |
||
</div> |
</div> |
||
それでもなお、自分自身のエラーに対処する必要に迫られる事例にしばしば出会います。 |
それでもなお、自分自身のエラーに対処する必要に迫られる事例にしばしば出会います。 |
||
通常の対処方法では {{method doclink|class=ApiBase|anchor=a66ea5959af0a75c62c90be5dff929d6c|method=$this |
通常の対処方法では {{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=a15ccc78c9787528c4f2b630d6a2d1517|method=$this |
エラーメッセージではなく警告を発するには、{{method doclink|class=ApiBase|anchor=a15ccc78c9787528c4f2b630d6a2d1517|method=$this→addWarning()}} を使用し、廃止を予告するには {{method doclink|class=ApiBase|anchor=aff281f11c4f17798fcbef8c2697af92a|method=$this→addDeprecation()}} を使用します。 |
||
<span id="Documentation"></span> |
<span id="Documentation"></span> |
||
== 説明文書 == |
== 説明文書 == |
||
APIの説明文書にはMediaWikiのi18n地域化の仕組みが使われます。 |
APIの説明文書にはMediaWikiのi18n地域化の仕組みが使われます。 |
||
必要なメッセージは既定でモジュールの「パス」に基づいて命名されます。 |
必要なメッセージは既定でモジュールの「パス」に基づいて命名されます。 |
||
actionとformatモジュールに対しては、パスはモジュールの登録時の名称が使われます。 |
actionとformatモジュールに対しては、パスはモジュールの登録時の名称が使われます。 |
||
クエリの下位モジュールの接頭辞は |
クエリの下位モジュールの接頭辞は 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 モジュールを mediawiki.org で 文書化することもできます。 |
|||
拡張機能のメインページで探すか、空間がさらに必要な場合には <code>Extension: |
拡張機能のメインページで探すか、空間がさらに必要な場合には {{tmpl|0=<code>Extension:<$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/ |
* {{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 操作 API の説明文書の一部です。 |
このドキュメントでは、MediaWiki 1.30またはそれ以降での、APIモジュールの作成を扱います。
モジュールの作成と登録
すべての API モジュールは ApiBase のサブクラスですが、派生したベースクラスを使用するタイプのモジュールもあります。 登録の方法もまた、モジュールのタイプに依存します。
- actionモジュール
- メインの
actionパラメーターに値を送るモジュールは必ずApiBaseをサブクラス化します。 登録にはAPIModulesキーを用いて、extension.jsonに記載すること。 - 書式のモジュール
- メインの
formatパラメーターに値を送るモジュールは必ずApiFormatBaseをサブクラス化します。 登録にはAPIFormatModulesキーを用いてextension.jsonに記載のこと。 拡張機能に書式モジュールが必要な場合は非常にまれです。 - クエリの下位モジュール
action=queryにprop、list、metaのパラメーターの値を渡すモジュールは、必ず ApiQueryBase (ジェネレーターとして使用できない場合) または ApiQueryGeneratorBase (ジェネレーターとして使用可能な場合) をサブクラス化します。APIPropModules、APIListModulesもしくは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 you need to assert that at most one of a set of parameters was supplied, use $this→requireMaxOneParameter().
- If you need to assert that at least one of a set of parameters was supplied, use $this→requireAtLeastOneParameter().
- If you need to assert that the user has certain rights, use $this→checkUserRightsAny().
- If you need to assert that the user can take an action on a particular page, use $this→checkTitleUserPermissions().
- If the user is blocked (and that matters to your module), pass the
Blockobject 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以降、以下のフックを使うことで、コアモジュールの機能を拡張することができます:
- APIGetAllowedParams – モジュールのパラメーター一覧を追加/修正する場合
- APIGetParamDescriptionMessages – モジュールのパラメーターに関する説明を追加/修正する場合
- APIAfterExecute – モジュールの実行後 (ただし結果出力の前) に何か処理をする場合
prop=、list=、meta=モジュールには、APIQueryAfterExecute を使用します- モジュールをジェネレーター モードで実行したい場合は代わりに APIQueryGeneratorAfterExecute を呼び出します
API機能を備えた拡張機能の一覧
API を追加/拡張する拡張機能の例は カテゴリ:API 拡張機能 を参照してください。
拡張機能の試験
- api.php を開き、ご利用のモジュールに対して作成されたヘルプまたはクエリの下位モジュールへ移動します。 ご利用の拡張機能のヘルプ情報が正しいかどうか、確認する必要があります。
getExamplesMessages()で提供したサンプルURL群が「例」に表示されるので、クリックします。- クエリ文字列中のURLパラメータを除去したり文字列を一部削除して、拡張機能の反応を試します。
- Special:ApiSandboxを開き、ご利用のAPIをインタラクティブに試用します。
- ご利用の拡張機能に関するその他の情報は、次のリンク先を開いて確認します。$api