RESTful WP-CLI – Hal yang sedang saya kerjakan


Izinkan saya mengatakan — Kamis, 4 Februari adalah hari yang sangat mengecewakan. Saya menghabiskan banyak waktu pada bulan Januari untuk WP REST APIREST API REST API adalah akronim dari RESTful Application Program Interface (API) yang menggunakan permintaan HTTP untuk GET, PUT, POST, dan DELETE data. Inilah cara front end sebuah aplikasi (bayangkan “aplikasi ponsel” atau “situs web”) dapat berkomunikasi dengan penyimpanan data (bayangkan “basis data” atau “sistem berkas”)
https://developer.wordpress.org/rest-api/
sebagai persiapan untuk hal yang ingin saya lakukan melalui baris perintah, dan banyak momentum / inspirasi / perasaan positif secara umum hancur dalam pertemuan itu. Karena itu, saya menghabiskan sebagian besar bulan Februari dan Maret mengerjakan fitur-fitur WP-CLIWP-CLI WP-CLI adalah Antarmuka Baris Perintah untuk WordPress, yang digunakan untuk melakukan tugas administratif dan pengembangan secara terprogram. Halaman proyeknya adalah http://wp-cli.org/ https://make.wordpress.org/cli/ yang tidak terkait dengan WP REST API (misalnya manajemen paket).

Namun, saya kembali bersemangat. Karena saya sudah menyelesaikan 2/3 dari salah satu aplikasi WordPress WP REST API + ReactReact React adalah pustaka JavaScript yang memudahkan pemahaman, pembuatan, dan pemeliharaan antarmuka pengguna stateless dan stateful.
https://reactjs.org
yang canggih itu, saya menemukan puluhan cara agar WordPress dapat digunakan dengan lebih efisien. Dan tentu saja, ini berarti melakukannya melalui baris perintah.

Sebelum kita melanjutkan: sebagian besar, jika bukan semuanya, fitur WP-CLI RESTful memerlukan perubahan internal pada WP-CLI. Anda perlu menjalankan wp cli update --nightly untuk mencoba fungsionalitas baru ini secara lokal. Setelah melakukannya, Anda dapat menjalankan wp package install danielbachhuber/wp-rest-cli untuk memasang versi terbaru.

Gunakan --debug dan --debug=rest untuk membuat profil endpoint REST Anda

REST API sepenuhnya berkaitan dengan kecepatan. Milidetik sangat berarti, dan setiap milidetik yang berhasil Anda hemat akan memberikan dampak nyata pada pengalaman pengguna di dunia nyata.

Untuk membuatnya jauh, jauh lebih mudah memahami berapa banyak kueri yang dijalankan endpoint Anda, dan berapa lama waktu yang dibutuhkan, saya telah menambahkan pembuatan profil ringan ke WP-CLI RESTful.

Gunakan --debug untuk mendapatkan ringkasan kueri Anda untuk perintah apa pun.

$ 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!"} |
+----+-----------------------------+

Gunakan --debug=rest untuk mendapatkan daftar lengkap kueri yang dijalankan.

$ 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!"} |
+----+-----------------------------+

Pembuatan profil berfungsi untuk operasi CRUD apa pun.

$ 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.

Semoga fitur ini menjadi bagian yang sangat berharga dalam proses pengembangan endpoint REST Anda, seperti halnya bagi saya. Sampaikan masukan Anda di issue Github-nya.

Gunakan wp rest * edit untuk mengedit sumber daya di editor sistem Anda

Kebanyakan orang mungkin tidak tahu ini, tetapi Anda dapat menggunakan wp post edit <id> untuk mengedit konten kiriman di editor sistem Anda (misalnya vim). Sekarang, dengan wp rest * edit, Anda dapat mengedit sumber daya REST apa pun di editor sistem Anda.

$ wp rest post edit 3 --user=daniel

Saat Anda menjalankan wp rest * edit, WP-CLI RESTful mengambil sumber daya tersebut, mengubahnya menjadi dokumen YAML, dan membukanya di editor sistem Anda:

---
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: [ ]

Jika Anda mengubah salah satu bidang, perintah tersebut akan mengirimkannya kembali ke WordPress (melalui WP REST API) untuk diperbarui.

Pada instalasi WordPress yang mendukung Basic Auth, pengeditan juga berfungsi melalui HTTPHTTP HTTP adalah akronim dari Hyper Text Transfer Protocol. HTTP merupakan protokol dasar yang digunakan oleh World Wide Web dan protokol ini menentukan cara pesan diformat dan dikirimkan, serta tindakan yang harus dilakukan server web dan peramban sebagai respons terhadap berbagai perintah.:

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

Dan, voila.

Mari terlibat!

Saya ingin mendengar masukan Anda tentang puluhan ide yang saya miliki untuk WP-CLI yang lebih RESTful:

  • Tampilkan dokumentasi bantuan dalam format seperti APIAPI API atau Application Programming Interface adalah perantara perangkat lunak yang memungkinkan program berinteraksi satu sama lain dan berbagi data dengan cara yang terbatas dan didefinisikan secara jelas. Blueprint dan Swagger [#36]
  • Perkenalkan wp rest * generate untuk membuat data tiruan dalam format yang diharapkan aplikasi Anda [#55].
  • Perkenalkan wp rest * diff agar dapat membandingkan keadaan dua WordPress yang berbeda, seperti Dictator [#56].
  • Temukan implementasi alias yang elegan, sehingga --http=http://daniel:[email protected] menjadi @wpdev [#2039]

Dan saya juga ingin mendengar ide-ide Anda! Begitu pula masukan, pertanyaan, atau ketidaksetujuan keras apa pun. Mari mengobrol di Github.