Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress

WP REST API: Dalaman dan Kustomisasi

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Introducing the WP REST API.
WP REST API: Creating, Updating, and Deleting Data

Malay (Melayu) translation by Muhammad Hasan (you can also view the original English article)

Dalam bahagian siri sebelumnya, kami belajar untuk membuat, mengemas kini dan memadam kandungan dari jauh melalui WP REST API.  Ini membolehkan kami untuk mewujudkan aplikasi bebas platform yang berfungsi dengan lancar dengan kuasa belakang WordPress, yang memberikan pengalaman pengguna yang kaya.

Dalam seksyen siri semasa, kami akan melihat API WP REST dalaman dan cara mereka bekerjasama untuk menghidupkan API.  Selepas itu, kami akan belajar untuk mengubah suai respons pelayan kepada titik akhir lalai untuk memasukkan medan tersuai.

Untuk menjadi lebih spesifik, dalam artikel ini, kami akan:

  • Ketahui mengenai kelas dalaman dan kaedah API WP REST
  • Ubah suai respons server ke titik akhir standard
  • Ketahui cara membuat bidang tersuai yang boleh diedi

Oleh itu mari mulakan dengan menyemak imbas WP REST API secara dalaman.

Kaedah Dalaman Dalaman dan WP REST API

Kelas dalam WP REST API boleh dibahagikan kepada dua kategori berikut:

  1. Kelas infrastruktur: Kelas ini adalah kelas asas yang bertanggungjawab untuk menggabungkan API.  Mereka tidak mengubah sebarang data.
  2. Kelas Endpoint : Kelas ini bertanggungjawab untuk melaksanakan operasi CRUD pada sumber seperti jawatan, halaman, pengguna, ulasan, dll.

Mari lihat setiap kelas individu dari dua kategori di atas.

Kelas infrastruktur

Tiga kelas infrastruktur yang bersama-sama membawa API REST bersama-sama adalah seperti berikut:

  1. WP_REST_Server 
  2. WP_REST_Request 
  3. WP_REST_Response 

WP_REST_Server

WP_REST_Server adalah kelas teras API WP REST yang mengimplementasikan pelayan REST dengan mendaftarkan laluan, permintaan melayani, dan menyediakan respons.  Ia memformat data yang akan dihantar kepada klien dan jika ada masalah, ia menyediakan ralat dengan memasukkan kod ralat dan kandungan mesej.  Ia juga memeriksa pengesahan.

Kami telah banyak bekerja dengan titik indeks /wp-json untuk memeriksa semua keupayaan dan laluan yang disokong untuk tapak.  Kaedah get_index (), yang bertanggungjawab untuk mendapatkan indeks tapak, juga terletak di kelas ini.

Untuk memberi permintaan dan menyediakan respons, kelas WP_REST_Server menggunakan kelas WP_REST_Request dan WP_REST_Response .

WP_REST_Request

Kelas WP_REST_Request mengimplementasikan objek permintaan API WP REST. Ia mengandungi data dari permintaan seperti tajuk dan permintaan badan, dan diserahkan kepada fungsi panggilan balik oleh kelas WP_REST_Server .  Ia juga memeriksa sama ada parameter diluluskan sepanjang permintaan yang sah dan membersihkan data apabila perlu.

WP_REST_Response

Kelas WP_REST_Response , seperti namanya, menerapkan objek tindak balas.  Ia mengandungi data yang diperlukan seperti kod respon dan tindak balas status badan.

Sekarang mari kita lihat pada kelas akhir.

Kelas Endpoint

Kelas endpoint dalam WP REST API bertanggungjawab untuk menjalankan operasi CRUD.  Kelas ini termasuk WP_REST_Posts_Controller , WP_REST_Taxonomies_Controller , WP_REST_Users_Controller , dll.  Semua kelas endpoint ini memperluaskan satu kelas abstrak tunggal WP_REST_Controller yang menyediakan corak yang konsisten untuk mengubah data.

Kelas WP_REST_Controller termasuk kaedah seperti get_item () , create_item ()update_item () , delete_item () , dan sebagainya, untuk melaksanakan operasi CRUD.  Kaedah ini harus digantikan dengan sub-kelas dengan menggunakan abstraksi mereka sendiri untuk mengambil, membuat, mengemas kini, dan mengubah suai data.

Anda boleh mengetahui lebih lanjut tentang kelas dan kaedah dalaman mereka dalam dokumentasi rasmi .

Selepas mengetahui tentang kelas dalaman API WP REST, mari kita lihat bagaimana kita boleh mengubah suai respons pelayan kepada titik akhir standard untuk memasukkan bidang tersuai.

Tukar Respons Server

Di bahagian sebelumnya, kita melihat kelas dalaman dan kaedah yang dibina API.  Bersama-sama, kelas dan kaedah ini memacu API secara menyeluruh dan membenarkan pemaju untuk memperluaskan API untuk mengambil kira senario dan kes penggunaan yang berbeza.

WP REST API mendedahkan data dengan cara yang boleh diramalkan.  Ini termasuk pelbagai sumber seperti jawatan, jawatan meta, halaman, dan pengguna, bersama dengan sifat standardnya.  Tetapi data ini tidak selalu sepadan dengan keperluan setiap tapak WordPress atau pengguna.  Oleh itu, API WP REST menyediakan cara untuk memodifikasi data yang pelayan kembali ke setiap laluan lalai.

Kaedah register_rest_field () menyediakan cara untuk menambah atau mengemas kini medan dalam tindak balas untuk objek.  Walau bagaimanapun, mengubah bidang respons tidak disyorkan oleh API kerana ia boleh menyebabkan masalah keserasian untuk pelanggan menjangkakan sambutan standard dari pelayan.  Jadi, jika anda perlu menukar medan, anda perlu mempertimbangkan menduplikasi medan dengan nilai yang dikehendaki.

Begitu juga, mengeluarkan medan standard sangat tidak digalakkan kerana pelanggan mungkin mengharapkannya.  Sekiranya anda memerlukan subset respons yang dikembalikan oleh pelayan, anda harus membuat konteks tambahan sebagai tambahan kepada konteks lalai seperti view atau edit .

Bagaimanapun, kami dapat menambahkan medan dengan selamat ke respons yang dikembalikan oleh pelayan untuk satu atau lebih objek.  Bidang ini boleh mengandungi sebarang nilai dari pos meta atau pengguna kepada sebarang nilai sewenang-wenang yang lain.

Dalam bahagian seterusnya, kami akan bekerjasama dengan kaedah register_rest_field () untuk menambah medan khusus kepada respons yang dikembalikan oleh pelayan untuk objek post .

Bekerja dengan kaedah register_rest_field ()

Seperti yang dinyatakan sebelum ini, kaedah register_rest_field () boleh digunakan untuk menambah atau mengemas kini medan dalam respons yang dikembalikan oleh pelayan.  Kaedah ini menerima tiga hujah:

  1. $object_type 
  2. $attribute 
  3. $args 

Argumen $object_type boleh sama ada rentetan atau array yang mengandungi nama semua objek yang kita mahu tambahkan ke medan.  Objek ini boleh menjadi post term comment user , dll.  Jika kita perlu menambah lajur tersuai untuk jenis pos adat, maka argumen $object_type adalah nama jenis pos.

Hujah $attribute adalah nama medan khusus.  Nama ini akan muncul dalam respon pelayan sebagai kunci dan nilainya.

Arahan $args adalah array bersekutu yang boleh mengandungi tiga butang berikut:

  1. $get_callback 
  2. $update_callback
  3.  $schema 

Nilai kekunci pertama ialah nama kaedah yang digunakan untuk memperoleh atau mengemas kini nilai medan khusus.  $schema terakhir menentukan kaedah atau pemboleh ubah yang digunakan untuk menentukan skema bidang adat.

Semua butang di atas adalah pilihan, tetapi jika tidak ditambah, keupayaan mereka tidak akan ditambah.  Sebagai contoh, jika anda menetapkan kekunci $get_callback tetapi bukan $update_callback kunci, fungsi pengambilan semula akan ditambah tetapi fungsi kemas kini tidak akan ditambah.  Jika anda menghilangkan kunci $get_callback , medan itu tidak akan ditambah pada respon sama sekali.

Kaedah register_rest_field () berfungsi dengan mengubah suai pemboleh ubah $wp_rest_additional_fields .  Pembolehubah array ini menyimpan medan yang disenaraikan berdasarkan jenis objek yang pelayan akan kembali.  Apabila bidang didaftarkan oleh kaedah register_rest_field () , ia akan ditambah kepada pembolehubah $wp_rest_additional_fields .  Walau bagaimanapun, secara manual mengubah suai pembolehubah $wp_rest_additional_fields tidak disyorkan.

Menambah Bidang Tersuai untuk Menjawab

Selepas membiasakan diri dengan kaedah register_rest_field () , kami kini boleh mengubah suai respons bagi objek post .  Kes penggunaan tipikal di sini ialah penambahan bidang nama paparan pengarang, yang biasanya diperlukan apabila penyertaan penyenaraian di halaman indeks.  Oleh kerana sambutan standard tidak memasukkan medan ini, kita boleh menggunakan kaedah register_rest_field () untuk memasukkannya dalam respon.

Kami mulakan dengan membuat plugin mudah.  Oleh itu, buat folder baru yang disebut rest-response-modifier dalam direktori / wp-content / plugins anda . Buat file index.php kosong dan tampal dalam takrifan plugin berikut:

Kaedah register_rest_field () mesti didaftarkan dalam tindakan rest_api_init .  Oleh itu, kami membuat fungsi bernama bs_add_custom_rest_fields () dan mengikatnya ke hook rest_api_init :

Perhatikan bahawa tag PHP <?php pembukaan tidak diperlukan di sini, tetapi saya menyertakannya supaya sintaksnya diserlahkan dengan betul.

Dalam fungsi bs_add_custom_rest_fields () , kita boleh menggunakan kaedah register_rest_field () untuk memasukkan medan untuk nama pengarang:

Seperti yang disebutkan dalam seksyen sebelumnya, hujah pertama dalam kaedah register_rest_field () adalah nama objek yang kami ubah suai respons tersebut.  Oleh kerana kita perlu mengubah respon bagi objek post , kita melawatnya sama seperti hujah pertama.

Argumen kedua dalam kod di atas adalah nama medan yang akan muncul dalam respon.  Amalan yang baik untuk awalan nama medan peribadi dalam respons untuk memastikan keserasian maksimum ke depan dan tidak digantikan kemudian oleh plugin lain.  Oleh itu, kami melangkau bs_author_name dalam hujah kedua sebagai $attribute bidang khusus.

Hujah ketiga dan terakhir dalam kod di atas adalah pelbagai untuk kaedah panggilan balik dan skema.  Array ini memegang nama kaedah panggil balik untuk mendapatkan dan mengemas kini medan khas dalam $get_callback dan $update_callback .  Kami lulus fungsi bs_get_author_name sebagai kaedah ambil balik panggilan balik.  Kami akan segera menentukan fungsi ini.

Untuk kunci $update_callback , kami lulus null kerana ia hanya medan baca dan kami tidak perlu mengemas kini nama penulis untuk jawatan.

Untuk kekunci $schema , kami meluluskan pelbagai bernama $bs_author_name_schema .  Array ini menyimpan pelbagai sifat untuk bidang seperti jenis data, konteks, dan penerangan. 

Satu-satunya perkara yang perlu kita tetapkan sekarang ialah fungsi bs_get_author_name () yang akan bertindak sebagai kaedah $get_callback untuk medan tersuai kami.  Berikut adalah kod untuk fungsi ini:

Kaedah $get_callback menerima tiga hujah berikut:

  1. $Object : Object semasa.  Dalam kes kami, ini adalah catatan terbaru.
  2. $Field_name : Nama difailkan kustom ditambahkan.
  3. $Request : Permintaan objek.

Kami menggunakan hak milik $object hujah $object yang memegang id pengarang siaran.  Dan dengan menggunakan fungsi get_the_author_meta () , kami mengambil dan memulangkan nama paparan pengarang untuk jawatan semasa.

Selepas medan didaftarkan, kami boleh menghantar permintaan GET ke laluan /wp/v2/posts untuk melihat apakah ia berfungsi dengan betul:

Inilah jawapannya di Postman:

Response

Medan tersuai yang baru didaftarkan juga akan muncul dalam respons pelayan, bersama skema, apabila kami menghantar permintaan OPTIONS ke laluan /wp/v2/posts :

schema

Oleh itu, bidang khusus untuk nama pengarang telah berjaya didaftarkan. Tetapi bidang ini hanya dapat dibaca kerana kami tidak dapat mengemas kini dengan menghantar permintaan POST .  Dalam bahagian berikut, kami akan menyenaraikan bidang yang boleh diedit untuk bilangan paparan pos.

Mendaftarkan Bidang Boleh Dikelji

Sekarang kami akan mendaftar medan khusus untuk jumlah paparan pos. Kami hanya akan mengendalikan pendaftaran medan sebenar dengan WP REST API, jadi ia tidak digunakan untuk menambah bilangan kiraan.

Inilah kod pendaftaran bs_post_views bidang khusus dan bs_post_views :

Kod ini mirip dengan apa yang kami tulis dalam bahagian sebelumnya, kecuali sekarang termasuk kaedah panggilan balik bs_update_post_views untuk key $update_callback .  Fungsi ini bertanggungjawab untuk mengemas kini nilai medan.

Ciri $context dalam $bs_post_views_schema skema  termasuk dua nilai untuk view dan edit .  Kemasukan nilai edit dalam argumen $context memastikan bahawa medan bs_post_views dikembalikan ke pelayan setelah diperbarui.

Kaedah pengambilan dan kemas kini balik adalah seperti berikut:

Kod ini agak mudah kerana menggunakan kaedah get_post_meta () dan update_post_meta () untuk mengambil dan mengemas kini setiap nilai.

Kaedah bs_get_post_views () pertama mengambil nilai meta untuk meta kunci bs_post_views dan memasukinya ke integer sebelum mengembalikannya.

Kaedah panggil balik yang diluluskan dalam $update_callback menerima tiga argumen berikut:

  1. $Value : $Value baru untuk medan.
  2. $Object : objek semasa respon.
  3. $Field_name : Nama medan sedang dikemas kini

Dalam kaedah bs_update_post_views () , kami mula-mula semak sama ada nilai yang diluluskan tidak kosong dan merupakan nilai berangka.  Jika tidak, kami kembali tanpa berbuat apa-apa.

Sekiranya nilai adalah berangka, kami lulus ke fungsi update_post_meta () yang menyimpannya ke pangkalan data selepas menaipnya ke integer yang sah.

Selepas berjaya mendaftar bidang, mari kita uji dengan menghantar permintaan GET :

Berikut adalah contoh tindak balas kepada permintaan di atas:

response

Seperti yang dapat kita lihat dalam gambar di atas, nilai medan bs_post_view saat ini adalah 0 untuk jawatan tertentu.  Ini berlaku kerana kaedah get_post_meta () mengembalikan rentetan kosong kerana ia tidak dapat mencari nilai meta untuk meta key bs_post_views dan menaip rentetan kosong kepada integer dalam hasil PHP pada 0.

Kami boleh mengemas kini medan bs_post_views dengan menghantar permintaan POST ke titik akhir /wp/v2/posts/ .  Agensi JSON untuk permintaan tersebut adalah seperti berikut:

Jika permintaan berjaya, pelayan akan mengembalikan kod status 200 - OK bersama dengan objek siaran yang dikemas kini yang juga termasuk medan bs_post_views :

response

bs_post_views bidang bs_post_views kini diperbarui.

Perhatikan bahawa kami menghantar agensi JSON sepanjang permintaan untuk mengemas kini medan.  JSON body includes bs_post_views dengan 4050 integer values.  Jika kami cuba menghantar nilai bukan angka, katakan "abc1234" , medan tidak akan dikemas kini kerana kami mempunyai syarat untuk memeriksa nilai angka dalam bs_update_post_views () balik kaedah.

Berikut adalah kod sumber lengkap untuk plugin ini:

Itulah yang diperlukan untuk mengubah suai respons pelayan pada titik akhir API lalai.  Kami hanya menggaraskan permukaan untuk mengubah API REST kerana ia memberikan lebih banyak fleksibiliti daripada hanya mengubah suai respons pelayan.  Ini termasuk menambah sokongan untuk jenis kandungan tersuai melalui pengawal adat dan ruang nama, dan juga mendaftarkan laluan khusus untuk mendedahkan dan mengubah suai data.  Kami akan cuba membincangkan topik lanjutan ini dalam artikel masa depan.

Hanya permulaan ... 

Di sini Kami menyimpulkan perjalanan kami memperkenalkan diri kepada WP REST API.  Dalam siri ini, kami telah membincangkan konsep asas seperti kaedah pengesahan dan pengambilan, penciptaan, dan pengemaskinian data. Di bahagian terakhir siri ini, kita melihat secara ringkas kelas dalaman WP REST API dan kemudian belajar untuk mengubah suai respons pelayan kepada titik akhir standard.

Tidak ada tujuan siri ini untuk melindungi setiap aspek WP REST API-sebenarnya, ia tidak dapat dicapai dalam satu siri.  Walau bagaimanapun, tujuan siri ini adalah untuk mendapatkan anda dan berjalan dengan penambahan hebat dan menggalakkan anda bermain-main dan mencuba sendiri.  Saya berharap anda telah menemui siri ini memenuhi tujuan utamanya.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.