Cách xây dựng API RESTful với Joomla


11

Tôi đã xây dựng các tiện ích mở rộng Joomla kể từ v1 nhưng tôi cần sớm có một API trực tiếp mà tôi đã xây dựng và đã sử dụng được một thời gian. Hiện tại tôi đang sử dụng Joomla 2.5 và có các plugin viết cho hệ thống này:

https://github.com/techj Joomla / com_api

Trước khi đi vào hoạt động, tôi muốn chứng minh hệ thống càng nhiều càng tốt. Thành phần API này mới chỉ bắt đầu được nâng cấp để hoạt động với Joomla v3 nên hiện tại nó đang ngăn trang web được nâng cấp. Tôi cũng nghĩ rằng tách API công khai và cổng thông tin người dùng có ý nghĩa vì không có lợi ích gì từ việc nó là một tiện ích mở rộng tích hợp vì API sẽ được sử dụng bởi các ứng dụng di động.

Kế hoạch hiện tại là xây dựng lại API trên tên miền phụ cho phép chúng tôi nâng cấp cổng thông tin người dùng. Tôi đã đọc về khung Joomla mới có vẻ thú vị. Điều này có phù hợp để xây dựng API RESTful cho các ứng dụng di động của chúng tôi không? Nếu vậy, họ có lời khuyên về việc bắt đầu? Tôi đã đọc rằng foF có thể được sử dụng để xây dựng API, đây có phải là một lựa chọn tốt không? Tôi thấy dự án Kickstarter có ý định xây dựng chính xác loại API này, đó có phải là một lựa chọn tiềm năng không? Tôi có nên tước lại trang web 2.5 hiện tại cho tên miền phụ để nó chỉ chạy API không?

Bất kỳ đề xuất nào về cách tiếp cận tốt nhất để xây dựng API RESTful dựa trên Joomla cho tương tác di động sẽ được đánh giá cao.


1
Tôi vừa nhìn thấy điều này mở rộng mới trên Joomla Extensions Directory, có thể có ích cho bạn: extensions.joomla.org/extensions/core-enhancements/libraries/...
Lodder

Câu trả lời:


8

Từ kinh nghiệm của tôi:

Giới thiệu về khung Joomla

Tôi đã cố gắng xây dựng API RESTful đơn giản để xác thực tích hợp dựa trên khung Joomla. Nó khá phức tạp, khá khác so với API Joomla hiện tại. Ngoài ra, mã nguồn hiện tại không thể được sao chép và các thư viện có thể trả về kết quả không mong muốn (được thực thi trong một môi trường khác). Tôi sẽ đợi cho đến khi có nhiều mã hơn và nó được chấp nhận nhiều hơn.

Giới thiệu về khung FOF

Tôi hiện đang phát triển chỉ với FOF. Khá tiện dụng, rất nhiều RAD, cấu hình tự động, v.v; và mã tương thích với J2.5 / J3.

Đối với API RESTful, bạn chỉ cần lấy ví dụ todo-fof và thêm bộ điều khiển với API. Thí dụ:

public function getIndexStatus()
{
    // CSRF prevention
    if ($this->csrfProtection)
    {
        $this->_csrfProtection();
    }

    $message['status'] = true;
    $message['error_message'] = 'Status Ok';

    $message = json_encode($message);
    echo $message;
    flush();

    JFactory::getApplication()->close();

}

Ngoài ra, bạn có thể tận dụng chế độ xem json tự động Ví dụ: chế độ xem duyệt (default.php) có thể tạo đầu ra json (chỉ cần thêm default_json.phpecho json_encode...)


1
Vấn đề duy nhất với FOF như tôi hiểu, đó là nó không còn được hỗ trợ bởi nhà phát triển trong lõi Joomla, mặc dù tôi hiểu rằng phiên bản của FOF đã được phát hành lại và sẽ tiếp tục, không phải là một phần của Joomla?
Craig

Bạn đúng, nhưng nó không phải là một vấn đề cả. Joomla của FOF khá ổn định (tôi chưa nâng cấp các tiện ích mở rộng của mình). F0F mới phải được cài đặt như một thư viện mới (... cuối cùng, bạn phải luôn cài đặt nó trong J2.5 ... và trình cài đặt đã sẵn sàng cho J3). Ngay bây giờ, 99% mã nguồn không thay đổi.
Anibal

Cảm ơn những gợi ý của bạn, tôi đồng ý rằng Joomla Framework khá phức tạp nhưng tôi thích học cách sử dụng nó. Tôi muốn thử sử dụng khung cho API của mình vì nó khá đơn giản nhưng không thể lấy nó để trả về tiêu đề chính xác cho JSON. Tôi bắt đầu một câu hỏi khác về nó.
Joe P

6

com_api chắc chắn là một cách tốt để xây dựng các dịch vụ REST cho trang web của bạn nếu bản thân tiện ích mở rộng không dựa trên FOF / RAD. Tuy nhiên, hãy cẩn thận với một vài vấn đề nếu bạn dự định tạo một cá thể Joomla riêng biệt chỉ dành cho API

  • Nội dung cụ thể của tên miền (Ví dụ: Nếu bạn đang hỗ trợ đăng ký người dùng, thì email chào mừng sẽ bao gồm một liên kết đến tên miền phụ API). Điều này có thể được giảm thiểu bằng cách chơi xung quanh với biến máy chủ PHP.
  • Đường dẫn hình ảnh tương tự, v.v ... cần phải chính xác, trừ khi bạn đang sử dụng S3

Ngoài ra, tôi chắc chắn không có bất kỳ vấn đề nào, vì điều đó sẽ tiếp tục được phát triển cho đến khi có một cách tạo API thực tế của Joomla.

Tuyên bố miễn trừ trách nhiệm: Tôi là người duy trì https://github.com/techj Joomla / com_api


Cảm ơn câu trả lời của bạn, thật tuyệt khi biết rằng bạn đang tiếp tục phát triển nó. Tôi thích cách com_api hoạt động nhưng tôi muốn thử và tránh chạy toàn bộ Joomla CMS chỉ để cung cấp API. Nếu tôi không thể làm cho khung làm việc như tôi cần, tôi chắc chắn sẽ tiếp tục sử dụng cái này.
Joe P

1

Theo quan điểm của tôi:

Đối với một khách hàng, tôi cần truy cập vào nội dung của trang j Joomla của anh ta từ một ứng dụng điện thoại thông minh. Nội dung được đặt trong com_content nên ban đầu tôi sử dụng nguồn cấp dữ liệu obRSS. Sau đó, tôi tìm thấy jBackend trên JED và đã thử nó. Nó có sẵn ở đây http://www.elfget.com/products/jbackend.html Mã này có vẻ rất sạch sẽ và nó hỗ trợ các yêu cầu RESTful và phản hồi JSON. Tài liệu trực tuyến còn hạn chế nhưng đủ rõ ràng cho các kỹ thuật viên. Thật không may tại thời điểm này nó chỉ hỗ trợ com_user và com_content nhưng trong trường hợp của tôi thì điều này vẫn ổn. Bây giờ tôi nên sử dụng nó cho một khách hàng khác sử dụng K2 CCK. Tôi đang cố gắng xây dựng một plugin tùy chỉnh để truy cập các bài viết và danh mục K2, nhưng ít nhất tôi sẽ lưu toàn bộ mã quản lý yêu cầu. Tôi đã gửi email cho nhà phát triển và anh ấy nói với tôi rằng anh ấy đang làm việc trên các mô-đun bổ sung như diễn đàn K2 và Kunena, đây là phần mở rộng rất hứa hẹn.


1

Trang web sau đây dường như là một tài nguyên tuyệt vời cho các hướng dẫn về cách xây dựng API JSONful RESTful:

http://jsonapi.org/

Để biết giá trị của nó, tôi cũng đang tung ra một sản phẩm API cho Joomla 3.4.x có tên là cAPI http://getcapi.org .

Sự khác biệt chính ở đây là tôi đặt khung định tuyến của mình trên khung vi mô Slim. Điều này cho phép tôi kết hợp một khung công tác mạnh mẽ đã được thử nghiệm và thử nghiệm vào ví dụ ứng dụng Joomla. Tôi cũng đã tạo một kiến ​​trúc plugin cho các tuyến dịch vụ, mở ra cánh cửa cho các tiện ích bổ sung và bảo mật dịch vụ web.

Bạn có thể tìm thêm thông tin từ các bài viết khác, tại đây:

/programming/26340885/rest-api-for-j Joomla-3/32706378 # 32706378

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi.

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.