Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

expservices: entfernte Dienste für Erweiterungen

Was expservices Erweiterungsautoren bietet - Dienste über ezjscore mit deklariertem Zugriff, Seitenaufteilung und einem einheitlichen Antwortumschlag, ein Katalog, API-Tokens - und wie Sie einen eigenen Dienst schreiben.

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/extension-development/part-8-reference/expservices.md

On this page

This page is a translation. Read the English original

expservices: entfernte Dienste für Erweiterungen

Teil 8, Referenz 33. expservices ist eine mit dem Kernel ausgelieferte Erweiterung, die die Funktionen der Installation als Dienste über ezjscore anbietet: eine Klasse je Bereich (System, Caches, Einstellungen, Benutzer, Inhalte ...), aufgerufen als <root>/ezjscore/call/exp<domain>::<method>, mit der Antwort in einem einheitlichen JSON-Umschlag. Apps, Skripte und andere Server verwenden sie; eine Erweiterung kann einen eigenen Bereich hinzufügen. Die vollständige Dokumentation ist Backend-Dienste über ezjscore.

Was Sie gegenüber einer einfachen Serverfunktion gewinnen

Einfache ezjscore-Serverfunktionexpservices-Dienst
Deklarationeine öffentliche statische Methodedie Methode plus ein Eintrag in static::$services (summary, access, write, args, returns)
Zugriffvon Ihrem Code geprüftdeklariert, von guard() geprüft
SchreibzugriffeIhr Code prüft POST und das Token'write' => true: POST und Formular-Token erforderlich, im Audit-Log erfasst
Fehlererror_text{ "ok": false, "error": { "code": 403, "message": ... } } mit Codes nach HTTP-Art
ListenIhr eigenes Formatseitenweise: data plus meta (total, offset, limit, count, has_more)
Auffindbarkeitkeineexpservices::catalog listet jeden Dienst mit seiner Deklaration
Clients außerhalb des Browsersdas Sitzungs-Cookiezusätzlich persönliche API-Tokens (Header X-Exp-Token)

Einen Dienst schreiben

Nach dem Beispiel der Dokumentation, mit Ihrem Bereich:

<?php
class expMyExtServices extends expServiceBase
{
    public static $services = array(
        'itemName' => array( 'summary' => 'The name of one item',
            'access' => array( 'myext', 'read' ), 'write' => false,
            'args' => array( 'item_id' => 'int' ), 'returns' => 'id, name' ),
    );

    public static function itemName( $args )
    {
        self::guard( __FUNCTION__ );
        $item = myExtItem::fetch( self::arg( $args, 0, 'int' ) );
        if ( !$item )
        {
            throw new expServiceException( 'No such item', 404 );
        }
        return self::ok( array( 'id' => (int)$item->attribute( 'id' ), 'name' => $item->attribute( 'name' ) ) );
    }
}

Registrieren Sie ihn in settings/ezjscore.ini.append.php Ihrer Erweiterung:

[ezjscServer_expmyext]
Class=expMyExtServices

und erzeugen Sie die Autoloads neu. Aufgerufen wird er als <root>/ezjscore/call/expmyext::itemName::42.

Hilfsmethode (protected static)Verwendung
guard( $method )den deklarierten Zugriff prüfen, bei Schreibzugriffen auch POST und Token
arg( $args, $i, $type, $default = null )ein typisiertes URL-Argument
post( $name, $type, $default = null )ein typisiertes POST-Feld
ok( $data, array $meta = array() )der Umschlag für den Erfolgsfall
page( array $items, $total, $offset, $limit ), pageOf( ... )eine seitenweise Liste

Codes von expServiceException: 400 (Argumente), 401 (Anmeldung nötig), 403 (verweigert), 404 (nicht gefunden), 409 (Konflikt), 422 (ungültig).

Sicherheit

  • Jeder Dienst deklariert seinen Zugriff; 'public' nur für das, was anonyme Besucher wissen dürfen.
  • Schreibzugriffe erfolgen per POST mit dem Formular-Token oder mit einem API-Token und werden im Audit-Log festgehalten.
  • Die ezjscore-Richtlinie ezjscore/call gilt weiterhin (Referenz der ezjscore-Serverfunktionen).
  • Geben Sie nie Passwörter, Tokens oder personenbezogene Daten zurück, die ein Aufrufer nicht braucht.

Demomodus. Im Demomodus (EXP_DEMO_MODE=1) verweigern die Passwortmethoden Administratoren: requireAcceptablePassword() wirft HTTP 403 mit expDemoMode::refusalText(), und expaccount.forgotRequest erzeugt für einen Administrator keinen Schlüssel. Ein eigener Dienst, der Passwörter ändert, sollte zuerst expDemoMode::protectsPassword() fragen. Demomodus für Entwickler.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x