@harrasteblogi JUURI NYT
--:--

Tilaa uutiskirje

Saat tuoreimmat 10 uusinta artikkelia kerran viikossa sähköpostiisi.

Tilaa uutiskirje

Kuinka rakentaa oma REST API middleware WordPressiinMiddleware-ajattelu on yleinen modernissa backend-kehityksessä, mutta WordPressissä sitä käytetään vielä yllättävän vähän. REST API middleware mahdollistaa keskitetyn tavan käsitellä autentikointia, validointia, rate limitingiä, loggingia ja request-transformaatioita ilman että sama logiikka toistuu jokaisessa endpointissa.

Tiivistelmä
Mitä middleware tarkoittaa

Middleware toimii requestin ja endpointin välissä:...

WordPressissä ei ole natiivia middlewarea

WordPress REST API ei tarjoa Express- tai Laravel-tyyppistä middleware-järjestelmää suoraan....

1. REST endpointin rakenne

Perus endpoint:...

3. Middleware interface

interface MiddlewareInterface { public function handle($request, $next); } 4. Middleware esimerkki class AuthMiddleware implements MiddlewareInterface { public function handle($request, $next) { if (!is_user_logged_in()) { return...

4. Middleware esimerkki

class AuthMiddleware implements MiddlewareInterface { public function handle($request, $next) { if (!is_user_logged_in()) { return new WP_Error( 'unauthorized', 'Unauthorized', ['status' => 401] ); } return $next($request);...

5. Middleware dispatcher

class Pipeline { protected $middlewares = []; public function pipe($middleware) { $this->middlewares[] = $middleware; } public function process($request, $destination) { $next = array_reduce( array_reverse($this->middlewares), function...

6. Endpoint middlewarella

register_rest_route( 'myplugin/v1', '/secure', [ 'methods' => 'POST', 'callback' => function($request) { $pipeline = new Pipeline(); $pipeline->pipe(new AuthMiddleware()); $pipeline->pipe(new ValidationMiddleware()); return $pipeline->process( $request, fn($req) => handle_secure_request($req)...

7. Validation middleware

class ValidationMiddleware { public function handle($request, $next) { if (!$request->get_param('email')) { return new WP_Error( 'missing_email', 'Email required', ['status' => 422] ); } return $next($request); }...

8. Rate limiting middleware

Erittäin tärkeä API-suojauksessa....

9. Logging middleware

class LoggingMiddleware { public function handle($request, $next) { error_log($request->get_route()); return $next($request); } } 10. Response middleware Middleware voi käsitellä myös responseja....

10. Response middleware

Middleware voi käsitellä myös responseja....

11. REST API filterit middleware-tyylillä

WordPress tarjoaa hookkeja:...

14. Request transformation

Middleware voi muokata requestia:...

15. CORS middleware

API-integraatioissa tärkeä....

16. API versionointi middlewarella

Middleware voi tarkistaa:...

17. Cache middleware

REST API voidaan cachettaa:...

18. Error handling middleware

Yhtenäinen error-rakenne:...

19. Dependency injection middlewareihin

Middleware kannattaa rekisteröidä containeriin:...

20. Performance huomioitavaa

Middleware-stack ei saa olla raskas....

21. Yleisimmät virheet

Moderni WordPress REST stack:...

22. Paras middleware-arkkitehtuuri

Moderni WordPress REST stack:...

Yhteenveto

Custom REST API middleware tekee WordPressin API-arkkitehtuurista huomattavasti siistimmän ja helpommin ylläpidettävän. Sen avulla autentikointi, validointi, logging ja turvallisuus voidaan keskittää yhteen paikkaan ilman duplicate-koodia....

Ilman middleware-rakennetta REST API muuttuu nopeasti vaikeasti ylläpidettäväksi:

  • duplicate validation
  • hajautettu auth-logiikka
  • epäyhtenäiset response-rakenteet
  • vaikea monitorointi

Hyvin suunniteltu middleware-layer taas tekee API:sta:

  • modulaarisen
  • turvallisen
  • testattavan
  • helposti laajennettavan

Mitä middleware tarkoittaa

Middleware toimii requestin ja endpointin välissä:

HTTP Request
↓
Middleware
↓
REST Endpoint
↓
Response Middleware
↓
HTTP Response

Middleware voi:

  • tarkistaa tokenit
  • validoida dataa
  • logata requestit
  • muokata responsea
  • estää abusea

WordPressissä ei ole natiivia middlewarea

WordPress REST API ei tarjoa Express- tai Laravel-tyyppistä middleware-järjestelmää suoraan.

Mutta saman voi rakentaa:

  • permission_callbackeilla
  • rest_pre_dispatch filterillä
  • rest_request_before_callbacks filterillä
  • custom dispatcherillä

1. REST endpointin rakenne

Perus endpoint:

register_rest_route(
    'myplugin/v1',
    '/orders',
    [
        'methods' => 'POST',
        'callback' => 'create_order',
    ]
);

Middleware-ajattelussa callback ei käsittele kaikkea itse.

2. Yksinkertainen middleware pipeline

Ajatus:

AuthMiddleware
↓
ValidationMiddleware
↓
RateLimitMiddleware
↓
Controller

3. Middleware interface

interface MiddlewareInterface {

    public function handle($request, $next);
}

4. Middleware esimerkki

class AuthMiddleware implements MiddlewareInterface {

    public function handle($request, $next) {

        if (!is_user_logged_in()) {

            return new WP_Error(
                'unauthorized',
                'Unauthorized',
                ['status' => 401]
            );
        }

        return $next($request);
    }
}

5. Middleware dispatcher

class Pipeline {

    protected $middlewares = [];

    public function pipe($middleware) {

        $this->middlewares[] = $middleware;
    }

    public function process($request, $destination) {

        $next = array_reduce(
            array_reverse($this->middlewares),
            function ($next, $middleware) {

                return function ($request) use ($middleware, $next) {

                    return $middleware->handle($request, $next);
                };

            },
            $destination
        );

        return $next($request);
    }
}

6. Endpoint middlewarella

register_rest_route(
    'myplugin/v1',
    '/secure',
    [
        'methods' => 'POST',
        'callback' => function($request) {

            $pipeline = new Pipeline();

            $pipeline->pipe(new AuthMiddleware());
            $pipeline->pipe(new ValidationMiddleware());

            return $pipeline->process(
                $request,
                fn($req) => handle_secure_request($req)
            );
        }
    ]
);

7. Validation middleware

class ValidationMiddleware {

    public function handle($request, $next) {

        if (!$request->get_param('email')) {

            return new WP_Error(
                'missing_email',
                'Email required',
                ['status' => 422]
            );
        }

        return $next($request);
    }
}

8. Rate limiting middleware

Erittäin tärkeä API-suojauksessa.

Esimerkki:

$key = 'rate_' . $_SERVER['REMOTE_ADDR'];

Tallennus:

  • transienttiin
  • Redisiin
  • custom storageen

9. Logging middleware

class LoggingMiddleware {

    public function handle($request, $next) {

        error_log($request->get_route());

        return $next($request);
    }
}

10. Response middleware

Middleware voi käsitellä myös responseja.

$response = $next($request);

Esimerkiksi:

  • response wrapping
  • headerit
  • caching metadata

11. REST API filterit middleware-tyylillä

WordPress tarjoaa hookkeja:

add_filter(
    'rest_pre_dispatch',
    function($result, $server, $request) {

        return $result;
    },
    10,
    3
);

Tämä toimii globaalina middleware-layerina.

12. Authentication middleware

Vaihtoehtoja:

  • JWT
  • Application Passwords
  • OAuth
  • custom tokenit

Middleware voi tarkistaa:

Authorization header

13. Permission callback ei riitä kaikkeen

WordPressin:

permission_callback

on hyvä authiin, mutta middleware-rakenne on joustavampi.

14. Request transformation

Middleware voi muokata requestia:

$request->set_param('user_id', get_current_user_id());

15. CORS middleware

API-integraatioissa tärkeä.

header('Access-Control-Allow-Origin: *');

Parempi:

  • whitelist domainit
  • rajatut metodit

16. API versionointi middlewarella

Middleware voi tarkistaa:

Accept-Version

tai route-version.

17. Cache middleware

REST API voidaan cachettaa:

Request hash
↓
Redis
↓
Cached response

Tämä voi vähentää kuormaa merkittävästi.

18. Error handling middleware

Yhtenäinen error-rakenne:

{
  "success": false,
  "error": {
    "code": "validation_failed"
  }
}

19. Dependency injection middlewareihin

Middleware kannattaa rekisteröidä containeriin:

$container->get(AuthMiddleware::class);

20. Performance huomioitavaa

Middleware-stack ei saa olla raskas.

Optimoi:

  • lazy loading
  • nopeat auth-checkit
  • Redis rate limiting
  • kevyt logging

21. Yleisimmät virheet

  • business logic middlewareissa
  • liian monta middlewarea
  • duplicate validation
  • ei response standardointia
  • raskaat DB-queryt middleware-layerissa
  • globaalit filterit ilman rajausta

22. Paras middleware-arkkitehtuuri

Moderni WordPress REST stack:

Routing
↓
Auth Middleware
↓
Rate Limit Middleware
↓
Validation Middleware
↓
Controller
↓
Response Middleware
↓
JSON Response

Yhteenveto

Custom REST API middleware tekee WordPressin API-arkkitehtuurista huomattavasti siistimmän ja helpommin ylläpidettävän. Sen avulla autentikointi, validointi, logging ja turvallisuus voidaan keskittää yhteen paikkaan ilman duplicate-koodia.

Kun middleware-rakenne yhdistetään dependency injectioniin, queue-järjestelmiin ja moderniin REST-arkkitehtuuriin, WordPress toimii tehokkaasti myös vaativissa API-pohjaisissa sovelluksissa.

🍪