1. Home
  2. Docs
  3. Development
  4. Plugin Entwicklung Lernen
  5. Aufgabe 5 – Custom REST API Endpoint

Aufgabe 5 – Custom REST API Endpoint

Aufgabe 5 – Custom REST API Endpoint

Projektarbeit / Recherche

Schwierigkeitsgrad: Fortgeschritten  |  Dauer: ca. 5–8 Std.

Szenario

Du entwickelst ein Plugin, das einen eigenen REST-Endpoint bereitstellt – z.B. für eine Mobile App oder ein JavaScript-Frontend, das WordPress-Daten per Fetch/Ajax abruft. Gleichzeitig lernst du, wie Authentifizierung und Permissions in der WP REST API funktionieren.

Lernziele

  • REST-Route mit register_rest_route() registrieren
  • Callback-Funktion und Permission-Callback implementieren
  • GET- und POST-Methoden unterscheiden
  • Antworten als WP_REST_Response zurückgeben
  • Den Endpoint mit Fetch-API oder Postman testen

Aufgabenstellung

  1. Recherche: Erkläre den Unterschied zwischen der WordPress REST API und dem älteren admin-ajax.php-Ansatz. Wann ist welcher sinnvoll?
  2. Öffentlicher Endpoint: Erstelle GET /wp-json/mein-plugin/v1/beitraege, der die letzten 5 Beiträge als JSON zurückgibt (Titel, Datum, Permalink).
  3. Geschützter Endpoint: Erstelle POST /wp-json/mein-plugin/v1/notiz, der eine Notiz (Custom Post) speichert – nur für eingeloggte Nutzer (is_user_logged_in() im Permission-Callback).
  4. Frontend-Konsument: Schreibe eine einfache HTML-Seite (oder ein WordPress-Template), das den GET-Endpoint per fetch() aufruft und die Beiträge im DOM anzeigt.
  5. Dokumentation: Beschreibe deine Endpoints in einer API-Übersicht (Methode, URL, Parameter, Antwort-Schema).

Starter-Code

<?php
/**
 * Plugin Name: Mein REST Plugin
 * Version: 1.0
 */
if ( ! defined( 'ABSPATH' ) ) exit;

add_action( 'rest_api_init', function () {

    // Öffentlicher GET-Endpoint
    register_rest_route( 'mein-plugin/v1', '/beitraege', [
        'methods'             => WP_REST_Server::READABLE,
        'callback'            => 'mein_plugin_get_beitraege',
        'permission_callback' => '__return_true', // öffentlich
    ]);

    // Geschützter POST-Endpoint
    register_rest_route( 'mein-plugin/v1', '/notiz', [
        'methods'             => WP_REST_Server::CREATABLE,
        'callback'            => 'mein_plugin_post_notiz',
        'permission_callback' => function() {
            return is_user_logged_in(); // TODO: ggf. capability prüfen
        },
    ]);
});

function mein_plugin_get_beitraege( WP_REST_Request $request ) {
    // TODO: WP_Query bauen, Daten aufbereiten, WP_REST_Response zurückgeben
    return new WP_REST_Response( [], 200 );
}

function mein_plugin_post_notiz( WP_REST_Request $request ) {
    $titel = sanitize_text_field( $request->get_param('titel') );
    // TODO: wp_insert_post(), Fehlerbehandlung
    return new WP_REST_Response( [ 'success' => true ], 201 );
}

Tipp: Teste deine Endpoints direkt im Browser mit /wp-json/mein-plugin/v1/beitraege oder nutze das Tool Postman für POST-Requests mit JSON-Body.

Lernziel-Tags

register_rest_route()WP_REST_Responsepermission_callbacksanitize_text_field()fetch() APIPostmanAPI-Dokumentation

Abgabe: Plugin als .zip + API-Dokumentation (.md oder PDF) + HTML-Testseite + Code-Review mit einem Partner

How can we help?