Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
programmieren:wordpress:rest_api_einrichten [2020/12/21 13:35] jgehrkeprogrammieren:wordpress:rest_api_einrichten [2022/12/17 12:28] (current) – external edit 127.0.0.1
Line 19: Line 19:
 function register_news_endpoint(){ function register_news_endpoint(){
  // http://localhost:8888/wp-json/mein-namespace/v1/items/<TYPE:string>/<ID:integer>  // http://localhost:8888/wp-json/mein-namespace/v1/items/<TYPE:string>/<ID:integer>
- $namespace = 'mein-namespace/v1/';+ // ohne Slash am Anfang und Ende 
 + $namespace = 'mein-namespace/v1';
  /* type => string aus klein Großbuchsten, Zahlen & -, sowie _ */  /* type => string aus klein Großbuchsten, Zahlen & -, sowie _ */
- /* ID => integer Zahl+ /* ID => integer Zahl */
  $route     = 'items/(?P<type>[a-zA-Z0-9-_]+)/(?P<id>\d+)/';  $route     = 'items/(?P<type>[a-zA-Z0-9-_]+)/(?P<id>\d+)/';
  $args      = [  $args      = [
  'methods'  => 'GET',  'methods'  => 'GET',
  'callback' => 'render_rest_item_endpoint',  'callback' => 'render_rest_item_endpoint',
 + 'permission_callback' => '__return_true',
  ];  ];
  
Line 50: Line 52:
  ];  ];
  
- return$return_array; /* <- wird automatisch in JSON umgewandelt */+ return $return_array; /* <- wird automatisch in JSON umgewandelt */
 } }
  
 </code> </code>
 +
 +===== Alternative Schreibweise als Klasse/Objekt =====
 +
 +Es ist sinnvoll die Registrierung der REST-API Route in Wordpress in eine eigene Klasse zu packen. Man verhindert Namenskonflikte, schafft mehr Übersichtlichkeit und hat insgesamt bessere Code-Qualität.
 +
 +<code php>
 +/**
 + *
 + */
 +class CreateTrackingPoint
 +{
 +
 + function __construct()
 + {
 + add_action( 'rest_api_init', [ $this, 'register_endpoint'] );
 + }
 +
 + public function register_endpoint()
 + {
 + // /wp-json/moewe-tracking/v1/tracking_create/<USER_ID:integer>/<EVENT_TYPE:string>
 + $namespace = 'moewe-tracking/v1'; // ohne Slash am Anfang und Ende
 + $route     = 'tracking_create/(?P<user_id>\d+)/(?P<event_type>[a-zA-Z0-9-_]+)/';
 + $args      = [
 + 'methods'             => 'GET',
 + 'callback'            => [ $this, 'render_endpoint' ],
 + 'permission_callback' => '__return_true',
 + ];
 +
 + register_rest_route( $namespace, $route, $args );
 + }
 +
 + public function render_endpoint( $request ) {
 +
 + $user_id    = $request['user_id'];
 +    $event_type = $request['event_type'];
 +
 + $return_array = [
 + 'user_id'    => $user_id,
 + 'event_type' => $event_type,
 + ];
 +
 +
 +
 + return $return_array; /* <- wird automatisch in JSON umgewandelt */
 + }
 +}
 +</code>
 +

Page Tools