Mục đích API REST?


17

Trước hết, tôi hiểu rằng đây là một plugin tại thời điểm hiện tại nhưng nó gần như chắc chắn là một phần của WordPress. Vì vậy, tôi hy vọng rằng điều này sẽ không bị đánh dấu là lạc đề.

Tôi đã đọc tài liệu chính thức của họ, rất nhiều bài viết khác và xem video hướng dẫn nhưng tôi vẫn không nhận được một số điểm .. Đây chắc chắn là tương lai của WordPress, nó rất tiện cho việc phát triển ứng dụng di động và sử dụng / chia sẻ dữ liệu giữa các trang web khác nhau nhưng: nó chỉ làm gì cho trang web của tôi?


Xem xét điều này:

Tôi hiện đang làm việc trên các ý kiến. Tôi muốn phần bình luận chỉ tải khi người dùng cuộn đến phần bình luận (với độ lệch -200px, để không có độ trễ) .

  • Tôi sẽ kích hoạt cuộc gọi ajax khi người dùng cuộn đến điểm đó
  • Cuộc gọi Ajax gửi một số dữ liệu với nó, như post_id vv
  • Chạy WP_Comment_Query()trên máy chủ
  • Gửi JSONdữ liệu trở lại khách hàng với quan hệ bình luận, tên, nội dung vv
  • Sử dụng JavaScript document.createElement(), innerHTML v.v để tạo và xuất ý kiến

Bây giờ .. Tại sao tôi lại sử dụng API REST? Sử dụng cho tôi là gì? Chỉ là tương lai?

Tôi vẫn sẽ cần sử dụng JavaScript để xuất tất cả dữ liệu tôi nhận được .. Tôi không tìm thấy bất kỳ bài viết hay nào tại sao hoặc cho những gì tôi nên sử dụng API REST (ngoại trừ chuyển dữ liệu giữa các trang web và phát triển ứng dụng di động) ..


Sử dụng API REST theo cách bạn mô tả sẽ mang lại cho bạn lợi ích của cách thức có cấu trúcthống nhất . Bạn không cần phải đối phó với người thu thập nội dung (truy vấn nhận xét) hoặc định dạng phản hồi (json). Cũng có thể có một số cải tiến với bộ nhớ đệm. Nhược điểm mà tôi thấy nói chung là, việc tạo khuôn mẫu di chuyển hoàn toàn sang trình duyệt - theo ý kiến ​​của tôi »nhà phát triển phụ trợ - làm tăng các vấn đề về hiệu suất.
David

Làm thế nào để bạn có kế hoạch gửi dữ liệu JSON trở lại máy khách? Làm thế nào bạn đang xây dựng mã phía máy chủ?
czerspalace


@David Về cơ bản API REST thực hiện tất cả các truy vấn và tôi chỉ cần cung cấp cho nó chuỗi truy vấn dưới dạng tham số? Về templating .. Tôi thấy những gì bạn đang nói, may mắn thay, phần cứng trở nên mạnh mẽ hơn với mỗi năm. Thật không may, sẽ luôn có những người từ chối tham gia vào vấn đề đó (người dùng IE cũ, tôi đang nhìn bạn) .
N00b

@czerspalace 1. WP_Comment_Query() 2. Xây dựng mảng các bình luận với từng mảng tham số trong whilevòng 3. json_encode() 4. echo dữ liệu được mã hóa trở lại. Tất cả điều này trong wp_ajaxvà / hoặc wp_ajax_noprivchức năng.
N00b

Câu trả lời:


8

Ở trạng thái hiện tại, nó là một tính năng được thiết kế tồi, không có bất kỳ lợi thế thực sự nào cho một nhà phát triển có thẩm quyền.

Ý tưởng cơ bản, tại thời điểm câu trả lời này được viết, là để lộ chức năng cốt lõi của WordPress dưới dạng API JSON REST. Điều này sẽ cho phép tách rời logic "kinh doanh" của WordPress khỏi UI và cho phép tạo các UI đầy đủ hoặc một phần khác nhau để quản lý và trích xuất thông tin từ wordpress. Điều này tự nó không phải là một cuộc cách mạng, mà là một sự tiến hóa. chỉ là sự thay thế API XML-RPC mà chính nó sắp xếp hợp lý HTTP dựa trên API trình.

Như với bất kỳ sự tiến hóa nào, ở mỗi bước bạn có thể tự hỏi mình, bạn có được lợi thế gì từ trạng thái cũ và câu trả lời có lẽ là "không nhiều", nhưng hy vọng các bước sẽ tích lũy thành một sự khác biệt lớn.

Vậy tại sao lời nói đầu tiêu cực cho câu trả lời này? Bởi vì kinh nghiệm của tôi là nhà phát triển phần mềm là hiếm khi có thể thiết kế API chung thực sự hữu ích mà không có trường hợp sử dụng cụ thể để trả lời. Một trường hợp sử dụng cụ thể ở đây có thể thay thế API XML-RPC để quản lý wordpress tự động, nhưng bất kỳ giao diện người dùng nào cũng phải cụ thể theo trang web và vì có một hình phạt hiệu năng rất lớn cho mọi yêu cầu được gửi từ máy khách đến máy chủ, bạn không thể chỉ tổng hợp sử dụng các API khác nhau để có được kết quả bạn muốn theo cách mà người dùng sẽ vẫn hạnh phúc. Điều này có nghĩa là đối với giao diện người dùng, đối với việc sử dụng không tầm thường, vẫn sẽ có rất ít sự khác biệt trong nỗ lực phát triển giữa việc sử dụng tuyến AJAX và tuyến đường REST-API.


Cảm ơn bạn, điều này làm cho mọi thứ chỉ tồi tệ hơn! Tôi thực sự không thể quyết định nên chọn con đường nào .. Những gì tôi biết là tôi có thể sẽ cần phải tạo một ứng dụng di động trong tương lai. Lời khuyên của bạn là API REST ở trạng thái hiện tại là tào lao ?
N00b

Không, chỉ là nó không thể hiện ra bất kỳ lợi thế thực sự nào. Còn về việc có nên sử dụng hay không, như mọi khi bạn nên sử dụng công cụ mà bạn biết rõ hơn, đặc biệt là bạn nên cân nhắc rằng api còn lại vẫn đang trong giai đoạn thử nghiệm. Tôi vẫn sẽ xem xét việc đăng ký các tuyến đường với phần api đã có trong lõi vì nó sẽ cung cấp cho bạn một url sạch hơn, những cái mà bạn sẽ có thể lưu trữ nếu cần, một số thứ bạn không thể làm với điểm cuối ajax.
Đánh dấu Kaplun

3

Hai lợi thế bao trùm là:

  1. Bạn có thể (cuối cùng) thực hiện tất cả các tác vụ quản trị mà không cần giao diện quản trị.
  2. Bạn có thể nhận được tất cả dữ liệu để hiển thị và loại bỏ hoàn toàn giao diện người dùng (và viết PHP).

Về ví dụ của bạn cụ thể-

Thay thế các bước 3 & 4 bằng API REST và thay thế các bước 1, 2 và 5 bằng Backbone.js. BOM, ứng dụng web động. Hoặc có thể bạn cảm thấy thoải mái hơn khi thực hiện định tuyến phức tạp cần thiết cho trang web của mình bằng Python.


Tôi rất bực mình về việc mọi người trực tuyến nói rằng ý nghĩa của ứng dụng web động là rất chủ quan (và đó là lý do tại sao họ không nói chính xác nó là gì) có nghĩa là tôi không biết 100% so với trang web không động. .. Phiên bản của bạn là gì? Điều này giống như một điều tôi cần biết có nên sử dụng API REST hay không ..
N00b

2
Ứng dụng có nghĩa là một cái gì đó ngoài việc hiển thị các trang blog tĩnh liên kết đến các trang blog tĩnh khác, trải nghiệm "giống như ứng dụng" liền mạch hơn. Cuộn xuống các ví dụ trên trang web xương sống .
Milo

3

Vâng, một vài điều thực sự.

  1. Nó cho phép bạn chạy các chức năng cụ thể khi cần, thay vì yêu cầu tất cả các tính toán của toàn bộ tải trang. Vì vậy, bạn có thể cập nhật các nhận xét định kỳ với chi phí khá thấp mà không cần làm mới trang bằng cách chỉ cần gọi điểm cuối API đó và cập nhật dữ liệu trên trang của bạn. Khái niệm này cuối cùng sẽ được ngoại suy thành các SPA (ứng dụng một trang) tải trang web "client" một cách nhanh chóng và mô phỏng tất cả các "thay đổi" của trang mà không cần phải kéo lại HTML của trang mỗi lần. Điều này đã rất phổ biến với sự ra đời của các khung như Angular, Ember và React. Các trang web có thể phản hồi với tốc độ nhanh, trong khi cả hai đều giảm sức mạnh tính toán cho người dùng cuối (chu kỳ kết xuất, logic phi kinh doanh) và giảm đáng kể tổng số cuộc gọi đến máy chủ (chỉ kéo dữ liệu bạn cần,

  2. Nó phân tách logic kinh doanh và trình kết xuất. Có, bạn có thể sử dụng API với một trang web PHP khác tạo ra kết quả hoặc xử lý nó bằng Javascript như bạn đã đề cập, nhưng bạn cũng có thể sử dụng API với ứng dụng di động gốc, ứng dụng máy tính để bàn, v.v. Không chỉ vậy, nhưng bạn có thể có một trong số tất cả đều nói về cùng một API, luôn thực hiện cùng một logic nghiệp vụ, điều này tạo ra sự nhất quán và độ tin cậy trên các máy khách khác nhau sử dụng API.

API rất tốt vì chúng tách biệt mối quan tâm về logic và hiển thị.


Về điểm đầu tiên .. Tại sao nó tốt hơn so với kiểm tra ajax JavaScript thông thường trong các khoảng thời gian và cập nhật động?
N00b

2
Chà, các cuộc gọi ajax "thông thường" chỉ là các cuộc gọi đến API! Thật sự không có sự khác biệt. Mục tiêu của API REST là cung cấp một API như vậy cho chức năng Wordpress cốt lõi. Bằng cách này, bạn có thể thực hiện nhiều thao tác hơn bằng AJAX, ứng dụng gốc, ứng dụng máy tính để bàn, v.v ... Phần "REST" của nó chỉ là một hệ thống các quy tắc / tiêu chuẩn xác định cách xây dựng API để dễ phát triển và duy trì.
Colt McCormack

2

API WordPress REST là độ hot mới. Với các ứng dụng điều khiển js trang đơn và WordPresses mong muốn trở thành một nền tảng ứng dụng, điều này rất có ý nghĩa. Kế hoạch là thay thế XML-RPC bằng API REST (đây là một điều tốt cho lý do bảo mật!)

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

  • Rõ ràng thời đại New York trang web mới được xây dựng trên đó .
  • Nó cho phép các ứng dụng di động và các dịch vụ bên ngoài khác truy cập nội dung wp (như wp-cli )
  • Nó cho phép các nhà phát triển xây dựng giao diện ứng dụng một trang với khung tiêu thụ JSON yêu thích trong tuần và có tất cả các tương tác thú vị trong tầm tay.
  • Nó cho phép phân tách các mối quan tâm (như đã đề cập ở trên) và tính độc lập cao hơn giữa các nhóm back-end và front-end.

Đó là một bộ công cụ khác để đưa WordPress tiến lên. Và, mặc dù đó là một hành trình uốn khúc để đến nơi chúng ta đang ở, tôi nghĩ rằng nó đáng để dành thời gian để khám phá và hiểu nó.


1

Điều đầu tiên trước tiên - REST rất nhẹ

Trong một dòng - Khi chúng tôi sử dụng API REST, chúng tôi thực hiện tất cả kết xuất dữ liệu ở phía máy khách (vòng lặp, điều kiện và cuộc gọi phía máy chủ, v.v.) tiết kiệm băng thông và đồng thời ứng dụng của chúng tôi sẵn sàng cho mọi nền tảng di động, tích hợp bên thứ 3 và được mô đun hóa ( tách biệt mối quan tâm giữa frontend và phía máy chủ).

Bạn không muốn điều này?


0

Ngoài 2 điểm tuyệt vời mà @Milo đã đề cập, tôi đặc biệt sử dụng API REST để hiển thị dữ liệu của mình cho các ứng dụng không phải WordPress. Chúng tôi có tiện ích mở rộng Chrome lấy thông tin từ cơ sở dữ liệu WordPress của chúng tôi và điều này được thực hiện bằng cách nhấn các điểm cuối API REST bằng các yêu cầu POST.


0

Cơ sở hạ tầng tin cậy

API REST phù hợp và dễ đọc với con người. Đó là tài liệu tự.

GET wp-json/wp/v2/postslà khá rõ ràng những gì nó làm. Đó GETlà một số bài viết.

Bạn có một không gian tên : wp, phiên bản: v2và bộ sưu tập đối tượngposts

Bạn có thể đoán những gì: GET wp-json/wp/v2/posts/5không? Làm thế nào về: GET wp-json/wp/v2/posts/5/comments Làm thế nào về:GET wp-json/shop/v2/orders/345/lines/11/price

Một nhà phát triển có thể dễ dàng đoán bằng cách nhìn vào đó, nó sẽ nhận được giá của 11đơn hàng 345ngay cả khi không đọc tài liệu. Nhà phát triển thậm chí có thể dễ dàng biết rằng nó đến từ shopPlugin vì nó được đặt tên.

Thế POST /wp-json/v2/posts title=New Blog Post cònPUT /wp-json/v2/posts title=New Title

Điều đó cũng khá rõ ràng. Nó làm cho một bài viết mới. Nhân tiện, nó trả về ID của bài viết mới. Đây không phải là về AJAX HOẶC API REST. AJAX đơn giản là một công nghệ truy cập API REST. Trong khi đó, trước đây, bạn sẽ phải đưa ra một loạt các tên hàm ajax trừu tượng như : get_price_for_lineitem( $order, $line ). Điều đó sẽ trả về chỉ là một số hay một đối tượng JSON? Tôi không chắc chắn, tài liệu ở đâu. Oh ... là cuộc gọi ajax get_order_line_pricehay get_lineitem_price.

Nhà phát triển không phải đưa ra các quyết định này, vì wp-jsonapi hiện tại cung cấp một mô hình cơ sở tốt để tuân theo khi tạo các điểm cuối của riêng bạn. Chắc chắn, một nhà phát triển plugin hoặc api có thể phá vỡ các quy tắc này, nhưng nói chung, việc tuân theo một tiêu chuẩn đã được đặt ra dễ dàng hơn và hầu hết các nhà phát triển sẽ tuân theo một mẫu đã được thiết lập (xem cách các mẫu jQuery phổ biến hiện nay).

TÓM TẮT mà không mất tập trung

Tôi có quan tâm đến cách làm POST /wp-json/mysite/v1/widgets title=Foobarviệc không? Không. Tôi chỉ muốn tạo một cái mới Widgetvà tôi muốn đổi lại ID. Tôi muốn làm điều đó từ một hình thức ở mặt trước của tôi mà không làm mới trang. Nếu tôi yêu cầu URL, tôi không quan tâm nếu đó là PHP, C #, ASP.NET hoặc bất kỳ công nghệ nào khác. Tôi chỉ muốn tạo một Widget mới.

API REST tách riêng phần phụ trợ từ phía trước. Về mặt kỹ thuật, nếu API của bạn đủ tốt, bạn có thể thay đổi toàn bộ ngăn xếp phụ trợ của mình. Miễn là bạn duy trì cấu trúc API REST giống nhau, mọi thứ phụ thuộc vào API sẽ không bị ảnh hưởng.

Nếu API REST của bạn đủ đơn giản và đủ nhất quán, sử dụng một danh từ như Widgetslà một bộ sưu tập các đối tượng và danh từ / định danh muốn Widget/2chỉ một thực thể duy nhất, thì thật sự đơn giản để viết API đó trong một công nghệ khác rất nhiều vì nó ít nhiều là cơ sở dữ liệu cơ bản mã.

Sử dụng các động từ Yêu cầu HTTP tiêu chuẩn.

API REST tận dụng cốt lõi của cách thức hoạt động của web và các ĐỘNG TỪ (đọc: hành động) mà bạn sử dụng bản đồ cho các hàm CRUD dữ liệu tiêu chuẩn.

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

Có nhiều động từ HTTP hơn, nhưng đó là những điều cơ bản. Mỗi yêu cầu qua internet sử dụng các động từ này. API REST nằm ngay trên mô hình mà web được xây dựng theo yêu cầu. Không cần bất kỳ lớp truyền thông hoặc mô hình trừu tượng ở giữa. Đó chỉ là một yêu cầu http tiêu chuẩn cho một URL và nó trả về một phản hồi. Bạn không thể đơn giản hơn thế.

Về cơ bản, nó làm cho nhà phát triển nhận thức rõ hơn về các loại hạt và bu lông về cách thức hoạt động của web và khi bạn hiểu rõ hơn về cách thức hoạt động của các giao thức cơ bản, cuối cùng bạn sẽ tạo ra một sản phẩm hiệu quả hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.