Tujuan REST API?

17

Pertama-tama, saya mengerti bahwa ini adalah sebuah plugin pada saat ini tetapi hampir pasti sebagian dari WordPress. Jadi saya harap ini tidak ditandai sebagai di luar topik.

Saya sudah membaca dokumen resmi mereka, banyak artikel lain dan menonton video tutorial tetapi saya masih belum mendapatkan beberapa poin .. Ini tentu masa depan WordPress, sangat berguna untuk pengembangan aplikasi seluler dan menggunakan / berbagi data antara berbagai situs tetapi: apa fungsinya untuk situs saya saja?


Pertimbangkan ini:

Saya sedang mengerjakan komentar. Saya ingin bagian komentar dimuat hanya ketika pengguna menggulir ke bagian komentar (dengan -200px offset, sehingga tidak ada penundaan) .

  • Saya akan memicu panggilan ajax ketika pengguna menggulir ke titik itu
  • Panggilan Ajax mengirimkan beberapa data dengannya, seperti post_id dll
  • Jalankan WP_Comment_Query()di server
  • Kirim JSONdata kembali ke klien dengan hubungan komentar, nama, konten dll
  • Gunakan JavaScript document.createElement(), innerHTML dll untuk membuat dan menampilkan komentar

Sekarang .. Mengapa saya menggunakan REST API saja? Apa gunanya bagiku? Hanya futureproof?

Saya masih akan perlu menggunakan JavaScript untuk output semua data saya mendapatkan .. saya tidak menemukan apapun artikel yang baik mengapa atau untuk apa yang harus saya gunakan REST API (kecuali transfer data antara situs dan developement aplikasi seluler) ..

N00b
sumber
Menggunakan REST API yang mendukung cara Anda menggambarkan akan memberi Anda manfaat dari cara terstruktur dan terpadu . Anda tidak perlu berurusan dengan pengumpul konten (permintaan komentar) atau format respons (json). Mungkin juga ada beberapa peningkatan dengan caching. Kelemahan yang saya lihat secara umum adalah, bahwa templating bergerak sepenuhnya ke browser yang - menurut pendapat saya «backend-developer« - meningkatkan masalah kinerja.
David
Bagaimana Anda berencana mengirim data JSON kembali ke klien? Bagaimana Anda membangun kode sisi server?
czerspalace
@David Pada dasarnya REST API mengerjakan semua pertanyaan itu sendiri dan saya hanya perlu memberinya string sebagai parameter? Tentang templating .. Saya mengerti apa yang Anda katakan, untungnya perangkat keras semakin kuat setiap tahun. Sayangnya akan selalu ada orang yang menolak untuk terlibat dalam hal itu (pengguna IE lama, saya melihat Anda) .
N00b
@czerspalace 1. WP_Comment_Query() 2. Bangun larik komentar masing-masing dengan larik parameter dalam whileloop 3. json_encode() 4. echo data disandikan kembali. Semua ini dalam wp_ajaxdan / atau wp_ajax_noprivfungsi.
N00b

Jawaban:

8

Pada kondisi saat ini, ini adalah fitur rekayasa buruk yang tidak memiliki keunggulan nyata bagi pengembang yang kompeten.

Ide dasarnya, seperti yang ada pada saat jawaban ini ditulis, adalah untuk mengekspos fungsionalitas inti WordPress sebagai JSON REST API. Ini akan memungkinkan decoupling logika WordPress "bisnis" dari UI dan memungkinkan membuat UI penuh atau sebagian yang berbeda untuk mengelola dan mengekstrak informasi dari wordpress. Dengan sendirinya ini bukan revolusi, tetapi sebuah evolusi. hanya penggantian XML-RPC API yang dengan sendirinya agak merampingkan HTTP berdasarkan API pengiriman.

Seperti halnya evolusi apa pun, pada setiap langkah Anda mungkin bertanya pada diri sendiri, keuntungan apa yang Anda dapatkan dari keadaan sebelumnya, dan jawabannya mungkin "tidak banyak", tetapi mudah-mudahan langkah-langkahnya menumpuk menjadi perbedaan besar.

Jadi mengapa kata pengantar negatif untuk jawaban ini? Karena pengalaman saya sebagai pengembang perangkat lunak adalah bahwa jarang mungkin untuk merancang API generik yang sebenarnya berguna tanpa harus menggunakan kasus penggunaan konkret. Kasus penggunaan konkret di sini dapat menggantikan XML-RPC API untuk manajemen wordpress otomatis, tetapi setiap ujung depan terkait harus spesifik situs dan karena ada penalti kinerja yang sangat besar untuk setiap permintaan yang dikirim dari klien ke server Anda tidak bisa hanya agregat gunakan API yang berbeda untuk mendapatkan hasil yang Anda inginkan dengan cara di mana pengguna akan tetap bahagia. Ini berarti bahwa untuk ujung depan, untuk penggunaan non-sepele, masih akan ada sedikit perbedaan dalam upaya pengembangan antara menggunakan rute AJAX dan rute REST-API.

Mark Kaplun
sumber
Terima kasih, ini membuat segalanya menjadi lebih buruk! Saya sungguh tidak bisa memutuskan jalan mana yang harus diambil. Yang saya tahu adalah saya mungkin perlu membuat aplikasi seluler di masa depan. Saran Anda adalah bahwa REST API pada kondisi saat ini adalah omong kosong ?
N00b
Tidak, hanya saja itu tidak menunjukkan keuntungan nyata. Adapun jika ingin menggunakannya atau tidak, seperti biasa Anda harus menggunakan alat yang Anda tahu lebih baik, terutama Anda harus mempertimbangkan bahwa api sisanya masih dalam versi beta. Saya masih akan mempertimbangkan mendaftarkan rute dengan bagian dari api yang sudah ada di inti karena akan memberi Anda url yang lebih bersih, yang dapat Anda cache jika diperlukan, sesuatu yang tidak dapat Anda lakukan dengan titik akhir ajax.
Mark Kaplun
3

Dua keunggulan menyeluruh adalah:

  1. Anda dapat (akhirnya) melakukan semua tugas admin tanpa antarmuka admin.
  2. Anda bisa mendapatkan semua data untuk ditampilkan dan menghilangkan ujung depan (dan menulis PHP) sepenuhnya.

Mengenai contoh Anda secara khusus-

Ganti langkah 3 & 4 dengan REST API, dan ganti langkah 1, 2, dan 5 dengan Backbone.js. BOOM, aplikasi web dinamis. Atau mungkin Anda lebih nyaman melakukan perutean kompleks yang diperlukan untuk situs Anda dengan Python.

Milo
sumber
Saya sangat kesal dengan kenyataan bahwa semua orang online mengatakan bahwa makna aplikasi web dinamis sangat subyektif (dan itu sebabnya mereka tidak tahu persis apa itu) yang berarti bahwa saya tidak 100% tahu apa itu dibandingkan dengan situs web tidak dinamis .. Apa versimu tentang itu? Ini seperti satu hal yang perlu saya ketahui apakah menggunakan REST API atau tidak ..
N00b
2
Aplikasi berarti sesuatu di luar merender halaman blog statis yang tertaut ke halaman blog statis lainnya, pengalaman "aplikasi seperti" yang lebih mulus. Gulir ke bawah ke contoh di situs backbone .
Milo
3

Sebenarnya ada beberapa hal.

  1. Ini memungkinkan Anda menjalankan fungsi-fungsi spesifik sesuai kebutuhan, alih-alih membutuhkan semua perhitungan dari seluruh pemuatan halaman. Jadi, Anda dapat memperbarui komentar secara berkala dengan overhead yang cukup rendah tanpa perlu me-refresh halaman dengan hanya memanggil titik akhir API dan memperbarui data pada halaman Anda. Konsep ini pada akhirnya akan diekstrapolasi ke dalam SPA (aplikasi satu halaman) yang memuat situs "klien" dengan cepat sekali, dan mengemulasi semua "perubahan" halaman tanpa perlu menarik kembali HTML halaman setiap kali. Ini sudah sangat populer dengan munculnya kerangka kerja seperti Angular, Ember, dan React. Situs dapat merespons dengan kecepatan sangat tinggi, sementara keduanya membebani sebagian daya komputasi ke pengguna akhir (siklus render, logika non-bisnis) dan mengurangi jumlah keseluruhan panggilan ke server secara signifikan (hanya tarik data yang Anda butuhkan,

  2. Ini memisahkan logika bisnis dan penyaji. Ya, Anda dapat menggunakan API dengan situs PHP lain memuntahkan hasilnya, atau menanganinya dengan Javascript seperti yang Anda sebutkan, tetapi Anda juga dapat mengkonsumsinya dengan aplikasi seluler asli, aplikasi desktop, dll. Tidak hanya itu, tetapi Anda dapat memiliki masing-masing dari mereka berbicara dengan API yang sama, yang secara konsisten melakukan logika bisnis yang sama, yang pada gilirannya menciptakan konsistensi dan keandalan di berbagai klien yang mengkonsumsi API.

API bagus karena mereka memisahkan masalah logika dan tampilan.

Colt McCormack
sumber
Tentang poin pertama .. Mengapa lebih baik daripada JavaScript biasa memeriksa pembaruan ajax secara berkala dan memperbarui secara dinamis?
N00b
2
Yah, panggilan ajax "biasa" ADALAH panggilan ke API! Sebenarnya tidak ada perbedaan. Tujuan dari REST API adalah untuk menyediakan API semacam itu untuk fungsionalitas inti Wordpress. Dengan cara ini Anda dapat melakukan lebih banyak operasi menggunakan AJAX, aplikasi asli, aplikasi desktop, dll. Bagian "REST" darinya hanyalah sistem aturan / standar yang menentukan bagaimana API harus dibangun sehingga mudah untuk dikembangkan dengan dan mempertahankan.
Colt McCormack
2

API REST WordPress adalah kesegaran baru. Dengan aplikasi yang didorong oleh satu halaman, dan WordPress ingin menjadi platform aplikasi, ini sangat masuk akal. Rencananya adalah mengganti XML-RPC dengan REST API (yang merupakan hal yang baik untuk alasan keamanan saja!)

https://make.wordpress.org/core/2015/09/21/wp-rest-api-merge-proposal/

  • New York kali situs baru dibangun di atasnya, tampaknya .
  • Ini memungkinkan aplikasi seluler dan layanan eksternal lainnya untuk mengakses konten wp (seperti wp-cli )
  • Hal ini memungkinkan pengembang untuk membangun front-end aplikasi satu halaman dengan kerangka kerja JSON favorit mereka minggu ini, dan memiliki semua interaksi keren di ujung jari mereka.
  • Hal ini memungkinkan pemisahan masalah (sebagaimana disebutkan di atas) dan independensi yang lebih besar antara tim back-end dan front-end.

Ini seperangkat alat lain untuk membawa WordPress maju. Dan, meskipun ini merupakan perjalanan yang berkelok-kelok untuk sampai ke tempat kita berada, saya pikir perlu meluangkan waktu untuk mengeksplorasi dan memahaminya.

Jeremy Ross
sumber
1

Hal pertama yang pertama - REST ringan

Dalam satu baris - Ketika kami menggunakan REST API kami melakukan semua rendering data di sisi klien (loop, kondisi dan panggilan sisi server dll.) Menghemat bandwidth dan pada saat yang sama aplikasi kami menjadi siap untuk platform mobile apa pun, integrasi pihak ke-3 dan termodulasi ( pemisahan antara sisi depan dan sisi server).

Anda tidak menginginkan ini?

Divyanshu Jimmy
sumber
0

Selain 2 poin hebat @Milo yang disebutkan, saya secara khusus menggunakan REST API untuk mengekspos data saya ke aplikasi non-WordPress. Kami memiliki ekstensi Chrome yang menarik informasi dari basis data WordPress kami, dan ini dicapai dengan menekan titik akhir REST API dengan permintaan POST.

Nick F
sumber
0

Infrastruktur KONSISTEN

API REST konsisten dan dapat dibaca manusia. Ini mendokumentasikan diri.

GET wp-json/wp/v2/postscukup jelas apa fungsinya. Ada GETbeberapa posting.

Anda memiliki namespace:, wpversi: v2dan koleksi objekposts

Bisakah Anda menebak apa: GET wp-json/wp/v2/posts/5tidak? Bagaimana: GET wp-json/wp/v2/posts/5/comments Bagaimana:GET wp-json/shop/v2/orders/345/lines/11/price

Seorang pengembang dapat dengan mudah menebak dengan melihat itu, ia akan mendapatkan harga baris 11sesuai pesanan 345bahkan tanpa membaca dokumentasi. Dev bahkan dapat dengan mudah mengatakan bahwa itu berasal dari shopPlugin karena itu namespace.

Bagaimana dengan POST /wp-json/v2/posts title=New Blog Post BagaimanaPUT /wp-json/v2/posts title=New Title

Itu juga cukup jelas. Itu membuat posting baru. Omong-omong, itu mengembalikan ID dari posting baru. Ini bukan tentang AJAX ATAU API REST. AJAX hanyalah teknologi yang mengakses API REST. Padahal, sebelumnya, Anda harus datang dengan sekelompok nama fungsi ajax abstrak seperti: get_price_for_lineitem( $order, $line ). Apakah itu akan mengembalikan hanya nomor, atau objek JSON? Saya tidak yakin, di mana dokumentasinya. Oh ... adalah panggilan ajax get_order_line_priceatau get_lineitem_price.

Pengembang tidak harus membuat keputusan ini, karena wp-jsonapi yang ada menyediakan model dasar yang baik untuk diikuti saat membuat titik akhir Anda sendiri. Tentu, pengembang plugin atau api dapat melanggar aturan-aturan ini, tetapi secara umum lebih mudah untuk mengikuti standar yang telah ditetapkan dan sebagian besar pengembang lebih suka mengikuti pola yang telah ditetapkan (lihat bagaimana pola jQuery meresap sekarang).

ABSTRAKSI tanpa gangguan

Apakah saya peduli bagaimana cara POST /wp-json/mysite/v1/widgets title=Foobarkerjanya? Nggak. Saya hanya ingin membuat yang baru Widgetdan saya ingin ID sebagai imbalannya. Saya ingin melakukannya dari formulir di ujung depan saya tanpa menyegarkan halaman. Jika saya membuat permintaan ke URL, saya tidak peduli apakah itu PHP, C #, ASP.NET atau teknologi lainnya. Saya hanya ingin membuat Widget baru.

REST API memisahkan backend dari depan. Secara teknis, jika API Anda cukup baik, Anda dapat mengubah seluruh tumpukan backend Anda. Selama Anda mempertahankan struktur REST API yang sama, apa pun yang bergantung pada API tidak akan terpengaruh.

Jika REST API Anda sederhana dan cukup konsisten, menggunakan kata benda seperti Widgetskumpulan objek dan kata benda / pengenal ingin Widget/2menunjukkan entitas tunggal, sangat mudah untuk menulis API itu dalam teknologi yang sangat berbeda karena lebih atau kurang dasar pemipaan basis data kode.

Menggunakan kata kerja Permintaan HTTP Standar.

API REST memanfaatkan inti cara kerja web dan VERB (baca: tindakan) yang Anda gunakan peta untuk fungsi CRUD data standar.

CREATE : POST
READ   : GET
UPDATE : PUT/PATCH
DELETE : DELETE

Ada lebih banyak kata kerja HTTP, tetapi itulah dasarnya. Setiap permintaan tunggal melalui internet menggunakan kata kerja ini. API REST berada tepat di atas model web yang dibangun berdasarkan permintaan. Tidak perlu ada lapisan komunikasi atau model abstraksi di antaranya. Itu hanya permintaan http standar ke URL dan mengembalikan respons. Anda tidak bisa menjadi lebih sederhana dari itu.

Pada dasarnya, ini membuat pengembang lebih sadar akan mur dan baut tentang bagaimana sebenarnya web bekerja dan ketika Anda semakin memahami bagaimana protokol yang mendasarinya bekerja, Anda akhirnya membuat produk yang lebih baik dan lebih efisien.

Terkuat
sumber