RESTful WP-CLI – Woran ich gearbeitet habe


Lassen Sie mich nur sagen: Donnerstag, der 4. Februar, war ziemlich demoralisierend. Im Januar habe ich sehr viel Zeit in die Vorbereitung auf das investiert, was ich auf der Kommandozeile mit der WP-REST APIREST API Die REST API ist ein Akronym für die RESTful Application Program Interface (API), die HTTP-Anfragen verwendet, um Daten abzurufen, zu aktualisieren, zu erstellen und zu löschen. Sie ermöglicht es der Benutzeroberfläche einer Anwendung (denken Sie an eine „Telefon-App“ oder „Website“), mit dem Datenspeicher (denken Sie an „Datenbank“ oder „Dateisystem“) zu kommunizieren.
https://developer.wordpress.org/rest-api/
machen wollte, und in diesem Meeting wurden viel Schwung, Inspiration und allgemein positive Gefühle zerstört. Daher habe ich einen Großteil des Februars und März damit verbracht, an WP-CLIWP-CLI WP-CLI ist die Kommandozeilenschnittstelle für WordPress, die verwendet wird, um administrative und Entwicklungsaufgaben auf programmatische Weise auszuführen. Die Projektseite ist http://wp-cli.org/ https://make.wordpress.org/cli/-Funktionen zu arbeiten, die nichts mit der WP REST API zu tun haben (z. B. Paketverwaltung).

Aber ich bin wieder im Sattel. Da ich zwei Drittel einer dieser schicken WordPress-Anwendungen mit WP REST API und ReactReact React ist eine JavaScript-Bibliothek, die es einfacher macht, zustandslose und zustandsbehaftete Benutzeroberflächen zu analysieren, zu erstellen und zu warten.
https://reactjs.org
fertiggestellt habe, stoße ich auf Dutzende von Möglichkeiten, WordPress effizienter zu machen. Und natürlich bedeutet das, dies auf der Kommandozeile zu tun.

Bevor wir fortfahren: Die meisten, wenn nicht sogar alle RESTful-WP-CLI-Funktionen erforderten Änderungen an WP-CLI im Hintergrund. Sie sollten wp cli update --nightly ausführen, um diese neue Funktionalität lokal auszuprobieren. Danach können Sie wp package install danielbachhuber/wp-rest-cli ausführen, um die neueste Version zu installieren.

Verwenden Sie --debug und --debug=rest, um Ihre REST-Endpunkte zu profilieren

Bei REST APIs dreht sich alles um Geschwindigkeit. Millisekunden zählen, und jede Millisekunde, die Sie einsparen können, wirkt sich in der Praxis auf die Benutzererfahrung aus.

Damit es deutlich einfacher wird zu verstehen, wie viele Abfragen Ihr Endpunkt ausführt und wie lange sie dauern, habe ich RESTful-WP-CLI um eine schlanke Profilerstellung erweitert.

Verwenden Sie --debug, um für jeden beliebigen Befehl eine Zusammenfassung Ihrer Abfragen zu erhalten.

$ wp rest post list --debug
Debug (rest): REST command executed 7 queries in 0.001954 seconds. Use --debug=rest to see all queries. (1.446s)
+----+-----------------------------+
| id | title                       |
+----+-----------------------------+
| 1  | {"rendered":"Hello world!"} |
+----+-----------------------------+

Verwenden Sie --debug=rest, um die vollständige Liste der ausgeführten Abfragen zu erhalten.

$ wp rest post list --fields=id,title --debug=rest
Debug: REST command executed 7 queries in 0.001696 seconds. Ordered by slowness, the queries are:
1:
  - 0.000291 seconds
  - WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts
  - SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish')  ORDER BY wp_posts.post_date DESC LIMIT 0, 10
2:
  - 0.000257 seconds
  - WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts, WP_Query->set_found_posts
  - SELECT FOUND_ROWS()
3:
  - 0.000256 seconds
  - WP_REST_Posts_Controller->get_items, WP_REST_Posts_Controller->prepare_item_for_response, setup_postdata, WP_Query->setup_postdata, get_userdata, get_user_by, WP_User::get_data_by
  - SELECT * FROM wp_users WHERE ID = '1'
4:
  - 0.000244 seconds
  - WP_REST_Posts_Controller->get_items, WP_REST_Posts_Controller->prepare_item_for_response, setup_postdata, WP_Query->setup_postdata, get_userdata, get_user_by, WP_User->init, WP_User->for_blog, WP_User->_init_caps, get_user_meta, get_metadata, update_meta_cache
  - SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC
5:
  - 0.000233 seconds
  - WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts, _prime_post_caches
  - SELECT wp_posts.* FROM wp_posts WHERE ID IN (1)
6:
  - 0.000209 seconds
  - WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts, _prime_post_caches, update_post_caches, update_object_term_cache, wp_get_object_terms
  - SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id  WHERE tt.taxonomy IN ('category', 'post_tag', 'post_format') AND tr.object_id IN (1) ORDER BY t.name ASC
7:
  - 0.000206 seconds
  - WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts, _prime_post_caches, update_post_caches, update_postmeta_cache, update_meta_cache
  - SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (1) ORDER BY meta_id ASC
 (1.598s)
+----+-----------------------------+
| id | title                       |
+----+-----------------------------+
| 1  | {"rendered":"Hello world!"} |
+----+-----------------------------+

Die Profilerstellung funktioniert für jeden CRUD-Vorgang.

$ wp rest post create --title="Test post" --user=daniel --debug
Debug (rest): REST command executed 28 queries in 0.023962 seconds. Use --debug=rest to see all queries. (1.777s)
Success: Created post.
$ wp rest post update 3 --content="Foo bar" --user=daniel --debug
Debug (rest): REST command executed 31 queries in 0.023309 seconds. Use --debug=rest to see all queries. (1.634s)
Success: Updated post.

Hoffentlich wird diese Funktion zu einem unverzichtbaren Bestandteil Ihres Entwicklungsprozesses für REST-Endpunkte, wie sie es bei mir geworden ist. Senden Sie mir Feedback in ihrem Github-Issue.

Verwenden Sie wp rest * edit, um eine Ressource in Ihrem Systemeditor zu bearbeiten

Die meisten wissen wahrscheinlich nicht, dass Sie wp post edit <id> verwenden können, um den Inhalt eines Beitrags in Ihrem Systemeditor (z. B. vim) zu bearbeiten. Mit wp rest * edit können Sie nun jede REST-Ressource in Ihrem Systemeditor bearbeiten.

$ wp rest post edit 3 --user=daniel

Wenn Sie wp rest * edit ausführen, ruft RESTful WP-CLI die Ressource ab, wandelt sie in ein YAML-Dokument um und öffnet sie in Ihrem Systemeditor:

---
date: 2016-04-14T14:02:57
date_gmt: null
password:
slug:
status: draft
title:
  raw: Test post
  rendered: Test post
content:
  raw: Foo bar
  rendered: |
    |
        Foo bar
excerpt:
  raw:
  rendered: |
    |
        Foo bar
author: 1
featured_media: 0
comment_status: open
ping_status: open
sticky: false
format: standard
categories:
  - 1
tags: [ ]

Wenn Sie Änderungen an einem der Felder vornehmen, sendet der Befehl die Ressource zurück an WordPress (über die WP REST API), um sie zu aktualisieren.

Auf WordPress-Installationen, die Basic Auth unterstützen, funktioniert die Bearbeitung auch über HTTPHTTP HTTP ist ein Akronym für Hypertext Transfer Protocol. HTTP ist das zugrunde liegende Protokoll des World Wide Web. Dieses Protokoll legt fest, wie Nachrichten formatiert und übertragen werden und wie Webserver und Browser auf verschiedene Befehle reagieren sollen.:

$ wp --http=http://daniel:[email protected] rest post edit 1

Et voilà.

Machen Sie mit!

Ich würde mich über Ihren Beitrag zu den Dutzenden von Ideen freuen, die ich für ein RESTful-WP-CLI habe:

  • Die Hilfedokumentation in Formaten wie APIAPI Eine API (Application Programming Interface) ist ein Softwarevermittler, der es Programmen ermöglicht, miteinander zu interagieren und Daten auf begrenzte, klar definierte Weise auszutauschen. Blueprint und Swagger ausgeben [#36]
  • wp rest * generate einführen, um Testdaten in dem von Ihrer Anwendung erwarteten Format zu generieren [#55].
  • wp rest * diff einführen, um den Zustand zweier verschiedener WordPress-Installationen vergleichen zu können, nach dem Vorbild von Dictator [#56].
  • Eine elegante Implementierung von Aliasen entwickeln, sodass --http=http://daniel:[email protected] zu @wpdev wird [#2039]

Und ich möchte auch Ihre Ideen hören! Ebenso wie jedes Feedback, Fragen oder heftigen Widerspruch. Lassen Sie uns auf Github diskutieren.