Deze plugin publiceert een REST API endpoint met status-/storingsinformatie.
- Plaats de plugin in
wp-content/plugins/wp_status_api/ - Activeer de plugin in WordPress
- Vereist WordPress 5.3+ en PHP 7.4+
Bij het verwijderen van de plugin blijven API clients, status en historie standaard bewaard, zodat opnieuw installeren geen integraties breekt. Om bij verwijderen alles op te ruimen, zet in wp-config.php:
define('STATUS_API_DELETE_DATA_ON_UNINSTALL', true);De API ondersteunt Bearer-token authenticatie (aanbevolen). In de admin-instellingenpagina kun je een token genereren op basis van een API key/secret.
Authenticatie met ?api_key=...&api_secret=... in de URL werkt nog, maar is verouderd: het secret belandt zo in logs en browsergeschiedenis. Responses op zulke verzoeken bevatten een Deprecation header (RFC 9745). In het tabblad "API clients" zie je per client welke methode recent is gebruikt; stap over op de Bearer token voordat je de methode uitzet (filter status_api_allow_query_auth).
Beheeracties op API clients (aanmaken, intrekken, secret regenereren, heractiveren, verwijderen) worden vastgelegd in de tabel {prefix}status_api_audit en zijn zichtbaar onder API Instellingen → Audit-log. Secrets worden nooit gelogd; van de API key alleen de eerste 8 tekens.
GET /wp-json/status-api/v1/status
curl -H "Authorization: Bearer <TOKEN>" \
"https://example.com/wp-json/status-api/v1/status"title(string)text(string)baseURL(string)status(string)timestamp(int)statusExpiryDate(string|null)statusExpiryTimestamp(int|null)timestampUtc(int) — sinds 0.9.10statusExpiryTimestampUtc(int|null) — sinds 0.9.10statusExpiryIso8601(string|null) — sinds 0.9.10, bijv.2025-12-31T23:59:00+01:00
De statusExpiry* velden zijn gevuld zodra er bij een groene status een vervaldatum is ingesteld. Na automatisch verlopen wordt status "geen", maar blijft de laatst ingestelde vervaldatum staan. Controleer dus altijd eerst status.
Let op: timestamp en statusExpiryTimestamp zijn om historische redenen de lokale sitetijd weergegeven als Unix-timestamp (wijken af van UTC). Gebruik voor nieuwe integraties de *Utc/*Iso8601 velden.
status_api_client_ip(string$ip,WP_REST_Request $request) — bepaal het client-IP voor rate limiting, bijv. achter een vertrouwde reverse proxy. StandaardREMOTE_ADDR.status_api_auth_rate_limit_max_attempts(int, standaard 20) — aantal mislukte pogingen per IP binnen het venster.status_api_auth_rate_limit_window(int seconden, standaard 900).status_api_last_used_throttle(int seconden, standaard 300) — hoe vaak "Laatst gebruikt" maximaal wordt bijgewerkt.status_api_status_capability(string, standaardedit_posts) — recht om de statusmelding te bekijken/opslaan en de historie te bekijken.status_api_history_manage_capability(string, standaardmanage_options) — recht om de historie te exporteren en te wissen.status_api_allow_query_auth(bool, standaardtrue) — authenticatie viaapi_key/api_secretin de URL toestaan. Bijv.add_filter('status_api_allow_query_auth', '__return_false');status_api_cache_control(string, standaardno-store, private) —Cache-Controlheader van de status-response. Lege string = geen header.
Voorbeeld (alleen gebruiken als élk verzoek via je eigen proxy binnenkomt):
add_filter('status_api_client_ip', function ($ip) {
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// Neem het laatste adres: dat is door je eigen proxy toegevoegd.
// Het eerste adres kan door de client zelf worden vervalst.
$parts = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
return trim(end($parts));
}
return $ip;
});- Composer (optioneel):
composer install - Vendor wordt niet gecommit (zie
.gitignore). - Tests (geen afhankelijkheden nodig):
php tests/run.php tests/test-api-response.phpis een contracttest op het JSON-formaat: bestaande velden mogen niet verdwijnen of van type veranderen; nieuwe velden alleen achteraan toevoegen.
status-api.php— hoofdbestand (niet hernoemen: WordPress herkent de plugin aanwp_status_api/status-api.php)includes/— één klasse per bestandassets/— admin CSS/JSuninstall.php— opruimen bij verwijderentests/— testset (niet in de release-zip)
Proprietary (zie LICENSE).