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
Manchmal möchte anderer PHP-Code Datenzugriff und Aggregationsfunktionen der Action-API nutzen. Statt eine HTTP-Netzwerk-Abfrage an den gleichen Server zu stellen, kannst du einen Anruf in PHP machen.

Die Schritte sind:

1) Wenn du dies in Zusammenhang mit einer existierenden Abfrage eines Benutzers ausführst, bereite die Abfrage-Parameter mit der -Klasse vor.
 * Der erste Parameter des Konstruktors ist die Abfrage, von der abgeleitet werden soll.
 * Der zweite Parameter des Konstruktors ist ein Array von API-Parametern, der identisch mit denen ist, die beim Stellen der Abfrage über das Netz genutzt werden würden.
 * Der dritte Parameter des Konstruktors ist optional, spezifiziere, um den API-Anruf als POST zu behandeln, wenn das API-Modul, das du aufrufst, POST-Abfragen verlangt.

Dieser Beispielcode behandelt die 'allpages'-Listenabfrage ab dem Buchstaben 'M'. Dies ist eine Beispielabfrage, die keinen Benutzer oder POST erfordert.

Wenn du ein Bearbeitungstoken als API-Parameter angeben musst, um Bearbeitungen oder andere Änderungen auszuführen, kannst du das Bearbeitungstoken wie folgt erhalten:

2) Erstelle eine -Instanz. Führe dann die API-Abfrage aus. Da der Parameter ein  -Objekt ist, wird   keine Formatierungen ausgeben oder Fehler behandeln. Ein Parameterfehler oder jeder andere interne Fehler wird eine Ausnahme verursachen, die im anrufenden Code gefunden werden kann.

Wichtig: Wenn du Seiten erstellen oder bearbeiten möchtest, musst du  als zweiten Parameter bei der Erstellung von   übergeben:

3) Erhalte das daraus resultierende Daten-Array.

Hier ist ein vollständiges Beispiel aus (Stand ). Es fügt Text zu einer Seite hinzu, weshalb es in einer HTTP-Abfrage eines angemeldeten Benutzers ausgeführt werden muss.

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