RESTful WP-CLI – जिस पर मैं काम कर रहा हूँ


मुझे बस इतना कहने दीजिए — गुरुवार, 4 फ़रवरी का दिन काफ़ी हतोत्साहित करने वाला था। मैंने जनवरी में WP REST APIREST API REST API, RESTful Application Program Interface (API) का संक्षिप्त रूप है, जो डेटा को GET, PUT, POST और DELETE करने के लिए HTTP अनुरोधों का उपयोग करता है। इसी के माध्यम से किसी एप्लिकेशन का फ्रंट एंड (जैसे “फ़ोन ऐप” या “वेबसाइट”) डेटा स्टोर (जैसे “डेटाबेस” या “फ़ाइल सिस्टम”) के साथ संचार कर सकता है।
https://developer.wordpress.org/rest-api/
पर बहुत समय लगाया था, ताकि कमांड लाइन पर वह कर सकूँ जो मैं करना चाहता था, और उस बैठक में काफ़ी गति, प्रेरणा और सामान्य सकारात्मक भावनाएँ नष्ट हो गईं। इसलिए, मैंने फ़रवरी और मार्च का अधिकांश समय WP REST API से असंबंधित WP-CLIWP-CLI WP-CLI, WordPress के लिए कमांड लाइन इंटरफ़ेस है, जिसका उपयोग प्रोग्रामेटिक तरीके से प्रशासनिक और विकास संबंधी कार्य करने के लिए किया जाता है। प्रोजेक्ट पेज है http://wp-cli.org/ https://make.wordpress.org/cli/ सुविधाओं (जैसे पैकेज प्रबंधन) पर काम करने में बिताया।

लेकिन अब मैं फिर से तैयार हूँ। चूँकि मैं उन शानदार WP REST API + ReactReact React एक JavaScript लाइब्रेरी है, जो स्टेटलेस और स्टेटफुल यूज़र इंटरफ़ेस को समझना, बनाना और बनाए रखना आसान बनाती है।
https://reactjs.org
WordPress एप्लिकेशन में से एक का दो-तिहाई काम पूरा कर चुका हूँ, इसलिए मुझे WordPress को अधिक कुशलता से चलाने के दर्जनों तरीके सूझ रहे हैं। और ज़ाहिर है, इसका मतलब है कि यह काम कमांड लाइन पर किया जाए।

आगे बढ़ने से पहले: अधिकांश, यदि सभी नहीं, RESTful WP-CLI सुविधाओं के लिए WP-CLI में पर्दे के पीछे बदलाव आवश्यक हैं। इस नई कार्यक्षमता को स्थानीय रूप से आज़माने के लिए आपको wp cli update --nightly चलाना होगा। ऐसा करने के बाद, नवीनतम संस्करण इंस्टॉल करने के लिए आप wp package install danielbachhuber/wp-rest-cli चला सकते हैं।

अपने REST एंडपॉइंट की प्रोफ़ाइल तैयार करने के लिए --debug और --debug=rest का उपयोग करें

REST API पूरी तरह गति पर केंद्रित होते हैं। मिलीसेकंड मायने रखते हैं, और आप जितना समय कम कर पाएँगे, उसका उपयोगकर्ता अनुभव पर वास्तविक प्रभाव पड़ेगा।

यह समझना काफ़ी आसान बनाने के लिए कि आपका एंडपॉइंट कितनी क्वेरी चला रहा है और उन्हें पूरा होने में कितना समय लग रहा है, मैंने RESTful WP-CLI में हल्की-फुल्की प्रोफ़ाइलिंग जोड़ दी है।

किसी भी कमांड के लिए अपनी क्वेरी का सारांश पाने हेतु --debug का उपयोग करें।

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

चलायी गई क्वेरी की पूरी सूची पाने के लिए --debug=rest का उपयोग करें।

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

प्रोफ़ाइलिंग किसी भी CRUD ऑपरेशन के लिए काम करती है।

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

उम्मीद है कि यह सुविधा आपके REST एंडपॉइंट विकास प्रक्रिया का एक अनमोल हिस्सा बन जाएगी, जैसा कि यह मेरी प्रक्रिया का बन चुकी है। इसके Github issue पर अपनी प्रतिक्रिया दें

अपने सिस्टम एडिटर में किसी संसाधन को संपादित करने के लिए wp rest * edit का उपयोग करें

अधिकांश लोगों को शायद यह पता नहीं होगा, लेकिन आप अपने सिस्टम एडिटर (जैसे vim) में पोस्ट की सामग्री संपादित करने के लिए wp post edit <id> का उपयोग कर सकते हैं। अब, wp rest * edit के साथ आप अपने सिस्टम एडिटर में किसी भी REST संसाधन को संपादित कर सकते हैं।

$ wp rest post edit 3 --user=daniel

जब आप wp rest * edit चलाते हैं, तो RESTful WP-CLI संसाधन प्राप्त करता है, उसे YAML दस्तावेज़ में बदलता है और आपके सिस्टम एडिटर में खोल देता है:

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

यदि आप किसी भी फ़ील्ड में बदलाव करते हैं, तो कमांड उसे WordPress को (WP REST API के माध्यम से) वापस भेजकर अपडेट कर देता है।

जिन WordPress इंस्टॉलेशन में Basic Auth का समर्थन है, वहाँ संपादन HTTPHTTP HTTP, Hyper Text Transfer Protocol का संक्षिप्त रूप है। HTTP वर्ल्ड वाइड वेब द्वारा उपयोग किया जाने वाला मूल प्रोटोकॉल है। यह प्रोटोकॉल निर्धारित करता है कि संदेशों को किस प्रकार स्वरूपित और प्रसारित किया जाए तथा विभिन्न कमांड के जवाब में वेब सर्वर और ब्राउज़र को कौन-सी कार्रवाइयाँ करनी चाहिए। पर भी काम करता है:

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

और, बस हो गया।

शामिल हों!

अधिक RESTful WP-CLI के लिए मेरे पास मौजूद दर्जनों विचारों पर आपकी राय जानना मुझे अच्छा लगेगा:

  • सहायता दस्तावेज़ों को APIAPI API या Application Programming Interface एक सॉफ़्टवेयर मध्यस्थ है, जो प्रोग्रामों को एक-दूसरे के साथ इंटरैक्ट करने और सीमित, स्पष्ट रूप से परिभाषित तरीकों से डेटा साझा करने की अनुमति देता है। Blueprint और Swagger जैसे प्रारूपों में रेंडर करना [#36]
  • आपके एप्लिकेशन की अपेक्षा के अनुसार प्रारूप में मॉक डेटा बनाने के लिए wp rest * generate शुरू करना [#55]।
  • दो अलग-अलग WordPress की स्थिति में अंतर देखने के लिए wp rest * diff शुरू करना, जैसा कि Dictator करता है [#56]।
  • अलियास के लिए एक सुंदर कार्यान्वयन तैयार करना, ताकि --http=http://daniel:[email protected] @wpdev बन जाए [#2039]

और मैं आपके विचार भी सुनना चाहता हूँ! साथ ही आपकी कोई भी प्रतिक्रिया, प्रश्न या तीखी असहमति भी। Github पर बातचीत करें