REST API มีวัตถุประสงค์อย่างไร?


17

ก่อนอื่นฉันเข้าใจว่านี่เป็นปลั๊กอินที่จุดปัจจุบัน แต่ส่วนใหญ่แล้วมันก็เกือบจะเป็นส่วนหนึ่งของ WordPress อยู่ดี ดังนั้นฉันหวังว่านี่จะไม่ถูกตั้งค่าสถานะเป็นนอกหัวข้อ

ฉันได้อ่านเอกสารอย่างเป็นทางการบทความอื่น ๆ มากมายและดูวิดีโอการสอนแล้ว แต่ฉันยังไม่ได้รับคะแนน .. นี่เป็นอนาคตของ WordPress แน่นอนมันมีประโยชน์มากสำหรับการพัฒนาแอพมือถือและการใช้ / แชร์ข้อมูลระหว่าง ไซต์อื่น แต่: ทำอะไรกับเว็บไซต์ของฉันเท่านั้น


พิจารณาสิ่งนี้:

ฉันกำลังทำงานกับความคิดเห็น ฉันต้องการส่วนความคิดเห็นในการโหลดเฉพาะเมื่อผู้ใช้เลื่อนไปส่วนความคิดเห็น(กับ -200px ชดเชยเพื่อให้มีความล่าช้าไม่)

  • ฉันจะเรียกการโทร ajax เมื่อผู้ใช้เลื่อนไปที่จุดนั้น
  • Ajax call ส่งข้อมูลบางอย่างเช่นpost_id อื่น ๆ
  • ทำงานWP_Comment_Query()ในเซิร์ฟเวอร์
  • ส่งJSONข้อมูลกลับไปยังลูกค้าที่มีความสัมพันธ์ความคิดเห็นชื่อเนื้อหาฯลฯ
  • ใช้ JavaScript document.createElement()และinnerHTML อื่น ๆเพื่อสร้างและแสดงความคิดเห็น

ตอนนี้ .. ทำไมฉันถึงต้องใช้ REST API แทน อะไรที่ใช้สำหรับฉัน Futureproof แค่ไหน?

ฉันยังคงต้องใช้ JavaScript เพื่อการส่งออกข้อมูลทั้งหมดที่ฉันได้รับ .. ฉันไม่พบใด ๆบทความที่ดีว่าทำไมหรือสำหรับสิ่งที่ฉันควรใช้ REST API (ยกเว้นการถ่ายโอนข้อมูลระหว่างเว็บไซต์และ Developement app มือถือ) ..


ใช้ REST API ในความโปรดปรานกับวิธีที่คุณอธิบายจะให้คุณประโยชน์ของการมีโครงสร้างและแบบครบวงจรทาง คุณไม่จำเป็นต้องจัดการกับตัวรวบรวมเนื้อหา (แบบสอบถามความคิดเห็น) หรือรูปแบบการตอบสนอง (json) อาจมีการปรับปรุงบางอย่างด้วยการแคช ข้อเสียที่ฉันเห็นโดยทั่วไปก็คือเทมเพลตนั้นจะย้ายไปยังเบราว์เซอร์ซึ่ง - ใน«ความเห็นของฉัน - ผู้พัฒนาแบ็กเอนด์ - "กำลังเพิ่มปัญหาประสิทธิภาพ
David

คุณวางแผนที่จะส่งข้อมูล JSON กลับไปยังลูกค้าอย่างไร คุณสร้างรหัสฝั่งเซิร์ฟเวอร์ได้อย่างไร?
czerspalace


@David โดยทั่วไป REST API ทำแบบสอบถามทั้งหมดเองและฉันต้องการป้อนสตริงข้อความค้นหาเป็นพารามิเตอร์หรือไม่ เกี่ยวกับการสร้างแรงบันดาลใจ .. ฉันเห็นสิ่งที่คุณกำลังพูดว่าโชคดีที่ฮาร์ดแวร์มีประสิทธิภาพมากขึ้นทุกปี แต่น่าเสียดายที่มีจะเป็นคนที่ปฏิเสธที่จะ Envolve ในเรื่องที่(ผู้ใช้ IE เก่าอิ่มมองหาที่คุณ)
N00b

@czerspalace 1. WP_Comment_Query() 2.สร้างอาร์เรย์ของข้อคิดเห็นแต่ละรายการด้วยอาร์เรย์ของพารามิเตอร์ในwhileลูป3 json_encode() 4. echoข้อมูลที่เข้ารหัสกลับมา ทั้งหมดนี้ในwp_ajaxและ / หรือwp_ajax_noprivฟังก์ชั่น
N00b

คำตอบ:


8

ณ สถานะปัจจุบันมันเป็นคุณสมบัติที่ได้รับการออกแบบมาอย่างไม่ดีนักซึ่งไม่มีข้อได้เปรียบที่แท้จริงสำหรับนักพัฒนาที่มีความสามารถ

แนวคิดพื้นฐานที่เป็นอยู่ในขณะที่เขียนคำตอบนี้คือการแสดงฟังก์ชั่นหลักของ WordPress เป็น JSON REST API สิ่งนี้จะช่วยให้ decoupling ของตรรกะ "ธุรกิจ" ของ WordPress จาก UI และเปิดใช้งานการสร้าง UIs แบบเต็มหรือบางส่วนที่แตกต่างกันเพื่อจัดการและแยกข้อมูลจาก wordpress สิ่งนี้ไม่ได้เป็นการปฏิวัติ แต่เป็นการวิวัฒนาการ เพียงแค่แทนที่ XML-RPC API ซึ่งตัวมันเองจะปรับปรุง HTTP ตาม API การส่ง

เช่นเดียวกับวิวัฒนาการในแต่ละขั้นตอนคุณอาจถามตัวเองว่าคุณได้เปรียบอะไรจากรัฐในอดีตและคำตอบนั้นอาจ "ไม่มาก" แต่หวังว่าขั้นตอนเหล่านี้จะมีความแตกต่างกันมาก

เหตุใดคำนำเชิงลบของคำตอบนี้ เพราะประสบการณ์ของฉันในฐานะนักพัฒนาซอฟต์แวร์นั้นแทบจะเป็นไปไม่ได้เลยที่จะออกแบบ API ทั่วไปที่มีประโยชน์จริง ๆ โดยไม่ต้องใช้กรณีที่เป็นรูปธรรมในการตอบ กรณีการใช้ที่เป็นรูปธรรมที่นี่สามารถแทนที่ XML-RPC API สำหรับการจัดการ WordPress อัตโนมัติ แต่ส่วนหน้าใด ๆ ที่เกี่ยวข้องจะต้องมีเว็บไซต์เฉพาะและเนื่องจากมีการลงโทษประสิทธิภาพมากสำหรับทุกคำขอที่ส่งจากลูกค้าไปยังเซิร์ฟเวอร์คุณไม่เพียง การใช้ API ที่แตกต่างกันโดยรวมเพื่อให้ได้ผลลัพธ์ที่คุณต้องการในแบบที่ผู้ใช้จะพึงพอใจ ซึ่งหมายความว่าสำหรับส่วนหน้าสำหรับการใช้งานที่ไม่สำคัญจะมีความพยายามในการพัฒนาแตกต่างกันเล็กน้อยระหว่างการใช้เส้นทาง AJAX และเส้นทาง REST-API


ขอบคุณสิ่งนี้ทำให้สิ่งเลวร้ายลงเท่านั้น! ฉันจริงใจไม่สามารถตัดสินใจได้ว่าจะต้องไปทางไหน .. สิ่งที่ฉันรู้คือฉันอาจจะต้องสร้างแอพมือถือในอนาคต คำแนะนำของคุณคือการที่ REST API ได้ที่รัฐปัจจุบันคืออึ ?
N00b

ไม่เพียง แต่มันไม่ได้แสดงให้เห็นถึงประโยชน์ที่แท้จริง สำหรับถ้าจะใช้หรือไม่เช่นเคยคุณควรใช้เครื่องมือที่คุณรู้จักดีกว่าโดยเฉพาะคุณควรคำนึงว่า api ที่เหลือยังอยู่ในช่วงเบต้า ฉันยังคงพิจารณาการลงทะเบียนเส้นทางกับส่วนหนึ่งของ api ที่มีอยู่แล้วในแกนเพราะมันจะให้ URL ที่สะอาดกว่าซึ่งคุณจะสามารถแคชได้ถ้าต้องการสิ่งที่คุณทำไม่ได้กับจุดสิ้นสุด ajax
Mark Kaplun

3

ข้อดีที่ครอบคลุมทั้งสองคือ:

  1. คุณสามารถ (ในที่สุด) ทำงานด้านการดูแลระบบทั้งหมดโดยไม่มีส่วนต่อประสานผู้ดูแลระบบ
  2. คุณสามารถรับข้อมูลทั้งหมดเพื่อแสดงผลและกำจัดส่วนหน้า (และเขียน PHP) ได้อย่างสมบูรณ์

เกี่ยวกับตัวอย่างของคุณโดยเฉพาะ -

แทนที่ขั้นตอนที่ 3 และ 4 ด้วย REST API และแทนที่ขั้นตอนที่ 1, 2 และ 5 ด้วย Backbone.js BOOM แอปพลิเคชันเว็บแบบไดนามิก หรือบางทีคุณอาจรู้สึกสะดวกสบายกับการกำหนดเส้นทางที่ซับซ้อนที่จำเป็นสำหรับไซต์ของคุณด้วย Python แทน


อิ่มหงุดหงิดมากเกี่ยวกับความจริงที่ว่าทุกคนออนไลน์กล่าวว่าแอพลิเคชันเว็บแบบไดนามิกความหมายเป็นอัตนัยมาก(และที่ว่าทำไมพวกเขาไม่ได้บอกว่ามันคืออะไร)ซึ่งหมายความว่าฉันทำไม่ได้ 100% ว่ามันคืออะไรเมื่อเทียบกับการไม่ได้เว็บไซต์แบบไดนามิก .. รุ่นของคุณคืออะไร นี่เป็นเหมือนสิ่งหนึ่งที่ฉันต้องรู้ว่าจะใช้ REST API หรือไม่ ..
N00b

2
แอปพลิเคชันหมายถึงบางสิ่งที่นอกเหนือจากการแสดงหน้าบล็อกสแตติกที่เชื่อมโยงไปยังหน้าบล็อกสแตติกอื่น ๆ เลื่อนลงไปที่ตัวอย่างบนไซต์กระดูกสันหลัง
Milo

3

มีบางสิ่งที่จริง

  1. มันช่วยให้คุณสามารถเรียกใช้ฟังก์ชั่นที่เฉพาะเจาะจงได้ตามต้องการแทนที่จะต้องการการคำนวณทั้งหมดของการโหลดหน้าเว็บทั้งหมด ดังนั้นคุณสามารถอัปเดตความคิดเห็นเป็นระยะ ๆ โดยมีค่าใช้จ่ายค่อนข้างต่ำโดยไม่จำเป็นต้องรีเฟรชหน้าเว็บเพียงแค่เรียกจุดสิ้นสุด API นั้นและอัปเดตข้อมูลบนหน้าเว็บของคุณ แนวคิดนี้จะถูกคาดการณ์ในที่สุดใน SPAs (แอปพลิเคชันหน้าเดียว) ซึ่งโหลดไซต์ "ลูกค้า" อย่างรวดเร็วหนึ่งครั้งและจำลองการเปลี่ยนแปลง "หน้าทั้งหมด" โดยไม่จำเป็นต้องดึง HTML ของหน้าเว็บอีกครั้งในแต่ละครั้ง สิ่งนี้ได้รับความนิยมอย่างมากจากการมีเฟรมเวิร์กเช่น Angular, Ember และ React ไซต์อาจตอบสนองด้วยความเร็วที่เห็นได้ชัดในขณะที่ทั้งสองกำลังถ่ายข้อมูลพลังงานบางอย่างแก่ผู้ใช้ (วงจรการแสดงผล, ตรรกะที่ไม่ใช่ธุรกิจ) และลดจำนวนการโทรทั้งหมดไปยังเซิร์ฟเวอร์อย่างมีนัยสำคัญ (ดึงข้อมูลที่คุณต้องการเท่านั้น

  2. มันแยกตรรกะทางธุรกิจและตัวแสดงผล ใช่คุณสามารถใช้ API กับไซต์ PHP อื่นที่กระจายผลหรือจัดการกับ Javascript อย่างที่คุณพูดถึง แต่คุณยังสามารถใช้งานได้ด้วยแอปพลิเคชันมือถือดั้งเดิมแอปพลิเคชันเดสก์ท็อปเป็นต้นไม่เพียงแค่นั้น หนึ่งในนั้นทั้งหมดพูดคุยกับ API เดียวกันซึ่งดำเนินการตรรกะทางธุรกิจเดียวกันอย่างสม่ำเสมอซึ่งจะสร้างความมั่นคงและความน่าเชื่อถือให้กับลูกค้าที่ใช้ API

API นั้นดีเพราะแยกความกังวลของตรรกะและการแสดงผลออกมา


เกี่ยวกับประเด็นแรก .. ทำไม ajax JavaScript จึงดีกว่าปกติในการตรวจสอบการอัปเดตเป็นระยะและอัปเดตแบบไดนามิก?
N00b

2
การโทร ajax "ปกติ" เป็นเพียงการเรียกไปยัง API! ไม่มีความแตกต่างจริงๆ เป้าหมายของ REST API คือการให้ API ดังกล่าวสำหรับฟังก์ชันการทำงานหลักของ Wordpress วิธีนี้คุณสามารถดำเนินการได้มากขึ้นโดยใช้ AJAX, แอพพื้นฐาน, แอพเดสก์ท็อป ฯลฯ ส่วน "REST" เป็นเพียงระบบของกฎ / มาตรฐานที่กำหนดวิธีการสร้าง API เพื่อให้ง่ายต่อการพัฒนาด้วยและ เก็บรักษา
เด็กหนุ่ม McCormack

2

WordPress REST API เป็นสิ่งใหม่ล่าสุด ด้วยแอปพลิเคชั่นที่ขับเคลื่อนด้วย js หน้าเดียวและ WordPresses ปรารถนาที่จะกลายเป็นแพลตฟอร์มแอปสิ่งนี้สมเหตุสมผลมาก แผนจะแทนที่ XML-RPC ด้วย REST API (ซึ่งเป็นสิ่งที่ดีสำหรับเหตุผลด้านความปลอดภัยเพียงอย่างเดียว!)

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

  • The New York Times เว็บไซต์ใหม่ถูกสร้างขึ้นบนมันเห็นได้ชัดว่า
  • อนุญาตให้แอพมือถือและบริการภายนอกอื่น ๆ เข้าถึงเนื้อหา wp (เช่นwp-cli )
  • ช่วยให้นักพัฒนาสามารถสร้างแอพพลิเคชั่นหน้าเดียวด้วยเฟรมเวิร์ก JSON ที่พวกเขาชื่นชอบในสัปดาห์นี้และมีปฏิสัมพันธ์ที่ยอดเยี่ยมทั้งหมดเพียงปลายนิ้วสัมผัส
  • จะช่วยให้แยกความกังวล (ดังกล่าวข้างต้น) และเป็นอิสระมากขึ้นระหว่างแบ็คเอนด์และฟรอนท์เอนด์

เป็นอีกชุดของเครื่องมือที่จะนำ WordPress ไปข้างหน้า และถึงแม้ว่ามันจะเป็นการเดินทางที่คดเคี้ยวเพื่อไปยังที่ที่เราอยู่ แต่ฉันคิดว่ามันคุ้มค่าที่จะสละเวลาในการสำรวจและทำความเข้าใจกับมัน


1

สิ่งแรกก่อน - REST มีน้ำหนักเบา

ในหนึ่งบรรทัด - เมื่อเราใช้ REST API เราจะทำการเรนเดอร์ข้อมูลทั้งหมดที่ฝั่งไคลเอ็นต์ (ลูปเงื่อนไขและการโทรฝั่งเซิร์ฟเวอร์ ฯลฯ ) ประหยัดแบนด์วิดธ์และในเวลาเดียวกันแอปพลิเคชันของเราพร้อมสำหรับแพลตฟอร์มมือถือ การแยกความกังวลระหว่างส่วนหน้าและฝั่งเซิร์ฟเวอร์)

คุณไม่ต้องการสิ่งนี้?


0

นอกจาก 2 คะแนนที่ยอดเยี่ยม @Milo ที่กล่าวถึงแล้วฉันใช้ REST API เพื่อเปิดเผยข้อมูลของฉันไปยังแอปพลิเคชันที่ไม่ใช่ WordPress เรามีส่วนขยายของ Chrome ที่ดึงข้อมูลจากฐานข้อมูล WordPress ของเราและสามารถทำได้โดยการกดจุดสิ้นสุด REST API ด้วยคำขอ POST


0

โครงสร้างพื้นฐานที่สอดคล้อง

REST API นั้นสอดคล้องและอ่านได้โดยมนุษย์ มันเป็นเอกสารด้วยตนเอง

GET wp-json/wp/v2/postsค่อนข้างชัดเจนว่ามันทำอะไร มันGETเป็นข้อความบางส่วน

คุณมีเนมสเปซ: wp, เวอร์ชัน: v2และการรวบรวมออบเจ็กต์posts

คุณเดาได้ไหมว่า: GET wp-json/wp/v2/posts/5ทำ วิธีการเกี่ยวกับ: GET wp-json/wp/v2/posts/5/comments วิธีการเกี่ยวกับ:GET wp-json/shop/v2/orders/345/lines/11/price

นักพัฒนาซอฟต์แวร์สามารถคาดเดาได้อย่างง่ายดายโดยการดูว่ามันจะได้ราคาของการ11สั่งซื้อ345แม้จะไม่ได้อ่านเอกสารก็ตาม ผู้พัฒนาสามารถบอกได้อย่างง่ายดายว่ามาจากshopปลั๊กอินตามที่กำหนดเนม

วิธีการเกี่ยวกับPOST /wp-json/v2/posts title=New Blog Post วิธีการเกี่ยวกับPUT /wp-json/v2/posts title=New Title

นั่นก็สวยใสเช่นกัน มันทำให้โพสต์ใหม่ โดยวิธีการนั้นจะส่งกลับ ID ของโพสต์ใหม่ มันไม่เกี่ยวกับ AJAX หรือ REST API AJAX เป็นเพียงเทคโนโลยีที่เข้าถึง REST API ในขณะที่ก่อนหน้านี้คุณจะต้องคิดชื่อฟังก์ชั่น ajax ที่เป็นนามธรรมเช่น: get_price_for_lineitem( $order, $line ). มันจะคืนค่าเป็นตัวเลขหรือวัตถุ JSON หรือไม่ ฉันไม่แน่ใจว่าเอกสารอยู่ที่ไหน โอ้ ... เป็นสายอาแจ็กซ์หรือget_order_line_priceget_lineitem_price

นักพัฒนาไม่จำเป็นต้องทำการตัดสินใจเหล่านี้เนื่องจากwp-jsonapi ที่มีอยู่ให้แบบจำลองพื้นฐานที่ดีที่จะปฏิบัติตามเมื่อสร้างจุดปลายของคุณเอง แน่นอนว่านักพัฒนาปลั๊กอินหรือ API สามารถทำลายกฎเหล่านี้ได้ แต่โดยทั่วไปแล้วการทำตามมาตรฐานที่ตั้งไว้แล้วจะทำได้ง่ายกว่าและนักพัฒนาส่วนใหญ่ค่อนข้างจะทำตามรูปแบบที่ได้ตั้งค่าไว้แล้ว

บทคัดย่อโดยไม่มีการรบกวน

ฉันสนใจเกี่ยวกับวิธีการPOST /wp-json/mysite/v1/widgets title=Foobarทำงานหรือไม่ Nope ฉันแค่ต้องการสร้างใหม่Widgetและฉันต้องการ ID ในทางกลับกัน ฉันต้องการทำจากแบบฟอร์มที่ส่วนหน้าของฉันโดยไม่ต้องรีเฟรชหน้า ถ้าฉันขอ URL ฉันไม่สนใจว่ามันเป็น PHP, C #, ASP.NET หรือเทคโนโลยีอื่น ๆ ฉันแค่ต้องการสร้างวิดเจ็ตใหม่

REST API แยกส่วนแบ็กเอนด์ออกจากด้านหน้า ในทางเทคนิคหาก API ของคุณดีพอคุณสามารถเปลี่ยนแบ็กเอนด์ทั้งหมดได้ ตราบใดที่คุณยังคงโครงสร้าง REST API เดียวกันสิ่งใดก็ตามที่ขึ้นอยู่กับ API จะไม่ได้รับผลกระทบ

หาก REST API ของคุณนั้นเรียบง่ายและสอดคล้องกันมากพอโดยใช้คำนามWidgetsว่าเป็นชุดของวัตถุและคำนาม / ตัวระบุที่ต้องการWidget/2ระบุเอนทิตีเดียวมันตรงไปตรงมาจริงๆที่จะเขียน API นั้นในเทคโนโลยีที่แตกต่างกันอย่างมาก รหัส.

ใช้คำกริยาคำขอ HTTP มาตรฐาน

REST APIs ใช้ประโยชน์จากแกนกลางของวิธีการทำงานของเว็บและ VERBs (อ่าน: การกระทำ) ที่คุณใช้แผนที่เพื่อฟังก์ชั่น CRUD ข้อมูลมาตรฐาน

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

มีกริยา HTTP เพิ่มเติม แต่เป็นพื้นฐาน ทุกการร้องขอทางอินเทอร์เน็ตจะใช้คำกริยาเหล่านี้ REST API ตั้งอยู่ด้านบนสุดของโมเดลที่เว็บสร้างขึ้นตามคำขอ ไม่จำเป็นต้องใช้เลเยอร์การสื่อสารหรือแบบจำลองนามธรรมในระหว่างนั้น เป็นเพียงคำขอ HTTP มาตรฐานไปยัง URL และส่งคืนการตอบกลับ คุณไม่สามารถรับได้ง่ายกว่านั้นมาก

โดยพื้นฐานแล้วมันทำให้นักพัฒนาตระหนักถึงถั่วและ bolts ของวิธีการใช้งานเว็บจริงและเมื่อคุณได้ใกล้ชิดกับการทำความเข้าใจวิธีการทำงานของโปรโตคอลพื้นฐานคุณสิ้นสุดการทำผลิตภัณฑ์ที่ดีขึ้นมีประสิทธิภาพมากขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.