API:Calling internally/de

Die API kann intern aus PHP ohne eine HTTP-Abfrage angerufen werden.

Die Anwendungslogik sollte dies jedoch vermeiden und direkt auf die PHP-Klassen zugreifen, die für die entsprechende Funktion verantwortlich sind, statt über das API-Framework zu gehen.

Interne API-Anrufe sollten grundsätzlich nur für Testzwecke und schnelles Prototyping genutzt werden.

Aus dem Code einer Testsuite
Um die API aus Tests anzurufen, ist es am einfachsten, deine Test-Klasse aus  (statt  ) weiter zu nutzen. Du kannst dann  wie folgt nutzen.

Tests der API sollten wie hier gezeigt erfolgen, manchmal möchtest du jedoch die Nutzung der API testen, um etwas für andere Tests aufzusetzen, die keine API-Tests sind. In diesem Fall möchtest du möglicherweise nicht ApiTestCase nutzen.

In diesem Fall muss die Abfrage genauer konstruiert werden, da das Bearbeitungstoken für die Sitzung gespeichert werden muss. Die globale  ist dann eine FauxRequest, die bereits durch die Test-Umgebung konfiguriert wurde.

Aus dem Anwendungscode
Sometimes other PHP code may wish to use the data access and aggregation functionality of the action API. Rather than making an HTTP network request to the same server, you can make a call within PHP.

The steps are:

1) If you are executing in the context of an existing request from a user, prepare request parameters using the  class. Its constructor's third parameter is optional, specify   to treat the API call as a POST when the API module you're invoking requires POST requests.
 * Its constructor's first parameter is the request to derive from.
 * Its constructor's second parameter is an array of API parameters that is the same as if making the request over the web.

This sample code issues the 'allpages' list query starting at the letter 'M'. This is a simple query, not requiring a user or POST.

If you need to provide an edit token as an API parameter when making edits or other changes, you can get the edit token like so:

2) Create an  instance. Then execute the API request. Because the parameter is a   object,   will not execute any formatting printers, nor will it handle any errors. A parameter error or any other internal error will cause an exception that may be caught in the calling code.

Important: If you want to create or edit pages, you have to pass  as a second parameter when creating the  :

3) Get the resulting data array.

Here is a complete example taken from (as of ). It adds text to a page, so it must run when handling a logged-in user's HTTP request.

FauxRequest
The example above creates a. This "inherits" some of the original request, such as IP and request headers that are set when MediaWiki is doing an action on behalf of a user, typically when handling a web request. If there is no user request context, for example when invoking the action API from a system process, or if you want to make a completely separate internal request, then you can use  instead.

Using  for write operations without passing request context causes bug T36838.

Siehe auch

 * Debugging in production for how to debug api.php in WMF production