วิธีสร้าง RESTful API ด้วย Joomla


11

ฉันได้สร้างส่วนขยายของ Joomla ตั้งแต่ v1 แต่ในไม่ช้าฉันก็จำเป็นต้องใช้ API แบบสดๆที่ฉันได้สร้างขึ้นมาและใช้งานมาระยะหนึ่ง ขณะนี้ฉันใช้ Joomla 2.5 และได้เขียนปลั๊กอินสำหรับระบบนี้:

https://github.com/techjoomla/com_api

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

แผนปัจจุบันคือการสร้าง API ขึ้นมาใหม่บนโดเมนย่อยซึ่งจะทำให้เราสามารถอัพเกรดพอร์ทัลผู้ใช้ได้ ฉันได้อ่านเกี่ยวกับกรอบ Joomla ใหม่ซึ่งดูน่าตื่นเต้น สิ่งนี้จะเหมาะสำหรับการสร้าง RESTful API สำหรับแอปมือถือของเราหรือไม่ ถ้าเป็นเช่นนั้นพวกเขามีเคล็ดลับในการเริ่มต้น? ฉันอ่านแล้วว่า FoF สามารถใช้เพื่อสร้าง API นี่เป็นตัวเลือกที่ดีหรือไม่? ฉันเห็นโครงการ Kickstarter ที่ตั้งใจจะสร้าง API ประเภทนี้อย่างนั้นเป็นตัวเลือกที่มีศักยภาพหรือไม่ ฉันควรตัดแถบไซต์ 2.5 ปัจจุบันของโดเมนย่อยออกเพื่อให้ทำงานเฉพาะ API หรือไม่

คำแนะนำใด ๆ เกี่ยวกับวิธีที่ดีที่สุดในการสร้าง RESTful API ที่ใช้ Joomla สำหรับการโต้ตอบบนมือถือจะได้รับการชื่นชมมาก


1
ฉันเพิ่งเห็นส่วนขยายใหม่นี้ในไดเรกทอรีส่วนขยายของ Joomla ซึ่งอาจเป็นประโยชน์สำหรับคุณ: Extensions.joomla.org/extensions/core-enhancements/l
ไลบรารี/…

คำตอบ:


8

จากประสบการณ์ของฉัน:

เกี่ยวกับกรอบ Joomla

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

เกี่ยวกับกรอบ FOF

ฉันกำลังพัฒนาด้วย FOF เท่านั้น ค่อนข้างมีประโยชน์ RAD มากมายการกำหนดค่าอัตโนมัติ ฯลฯ และรหัสเข้ากันได้กับ J2.5 / J3

สำหรับ RESTful API คุณสามารถคว้าตัวอย่างสิ่งที่ต้องทำและเพิ่มตัวควบคุมด้วย API ตัวอย่าง:

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();

}

นอกจากนี้คุณสามารถใช้ประโยชน์จากมุมมอง json อัตโนมัติเช่นมุมมองการเรียกดู (default.php) สามารถสร้างเอาต์พุต json (เพียงเพิ่มdefault_json.phpและecho json_encode... )


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

คุณพูดถูก แต่ไม่ใช่ปัญหาเลย FOF ของ Joomla นั้นค่อนข้างเสถียร (ฉันยังไม่ได้อัปเกรดส่วนขยายของฉัน) F0F ใหม่จะต้องติดตั้งเป็นไลบรารีใหม่ (... ในตอนท้ายคุณจะต้องติดตั้งใน J2.5 ... และเครื่องมือติดตั้งพร้อมสำหรับ J3) ตอนนี้ 99% ของรหัสที่มาไม่มีการเปลี่ยนแปลง
Anibal

ขอบคุณสำหรับคำแนะนำของคุณฉันยอมรับว่า Joomla Framework ค่อนข้างซับซ้อน แต่ฉันสนุกกับการเรียนรู้วิธีใช้งาน ฉันต้องการลองใช้เฟรมเวิร์กสำหรับ API ของฉันเพราะค่อนข้างง่าย แต่ไม่สามารถเอาคืนส่วนหัวที่ถูกต้องสำหรับ JSON ได้ ฉันเริ่มคำถามอื่นเกี่ยวกับเรื่องนี้
Joe P

6

com_api เป็นวิธีที่ดีในการสร้างบริการ REST สำหรับเว็บไซต์ของคุณหากส่วนขยายนั้นไม่ได้มาจาก FOF / RAD อย่างไรก็ตามระวังด้วย gotchas สองสามตัวถ้าคุณวางแผนที่จะสร้างอินสแตนซ์ Joomla แยกต่างหากสำหรับ API เท่านั้น

  • สิ่งเฉพาะโดเมน (เช่น: หากคุณสนับสนุนการลงทะเบียนผู้ใช้อีเมลต้อนรับจะมีลิงก์ไปยังโดเมนย่อย API) สิ่งนี้สามารถบรรเทาได้ด้วยการเล่นกับตัวแปรเซิร์ฟเวอร์ PHP
  • เส้นทางของรูปภาพในทำนองเดียวกันจะต้องถูกต้องเว้นแต่ว่าคุณกำลังใช้ S3

นอกเหนือจากนั้นฉันแน่ใจว่าไม่ควรมีปัญหาใด ๆ เนื่องจากจะยังคงได้รับการพัฒนาต่อไปจนกว่าจะมีวิธีการสร้าง Joomla ที่ไม่เป็นความจริง

ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้ดูแลhttps://github.com/techjoomla/com_api


ขอบคุณสำหรับคำตอบของคุณมันเป็นเรื่องดีที่รู้ว่าคุณพัฒนามันอย่างต่อเนื่อง ฉันชอบที่ com_api ทำงานอย่างไร แต่ฉันต้องการพยายามหลีกเลี่ยงการใช้ Joomla CMS ทั้งหมดเพื่อให้ API ถ้าฉันไม่สามารถทำงานได้ตามที่ฉันต้องการฉันจะใช้มันต่อไป
Joe P

1

สองเซ็นต์ของฉัน:

สำหรับลูกค้าฉันต้องการเข้าถึงเนื้อหาของไซต์ joomla ของเขาจากแอพสมาร์ทโฟน เนื้อหาถูกวางไว้ใน com_content ดังนั้นในตอนแรกฉันใช้ obRSS ฟีด จากนั้นฉันก็พบ jBackend บน JED และลอง มีให้ที่นี่http://www.selfget.com/products/jbackend.html รหัสดูเหมือนจะสะอาดมากและรองรับคำขอ RESTful และการตอบสนอง JSON เอกสารออนไลน์มีข้อ จำกัด แต่ชัดเจนเพียงพอสำหรับช่างเทคนิค น่าเสียดายที่ในขณะนี้รองรับเฉพาะ com_user และ com_content แต่ในกรณีของฉันมันก็ใช้ได้ ตอนนี้ฉันควรใช้มันสำหรับลูกค้ารายอื่นที่ใช้ K2 CCK ฉันกำลังพยายามสร้างปลั๊กอินที่กำหนดเองเพื่อเข้าถึงบทความและหมวดหมู่ K2 แต่อย่างน้อยฉันจะบันทึกรหัสการจัดการคำขอทั้งหมด ฉันส่งอีเมลถึงผู้พัฒนาและเขาบอกฉันว่าเขากำลังทำงานกับโมดูลเพิ่มเติมเช่นฟอรัม K2 และ Kunena ด้วยเช่นกันมันเป็นส่วนเสริมที่มีแนวโน้มมาก


1

ไซต์ต่อไปนี้ดูเหมือนจะเป็นแหล่งข้อมูลที่ยอดเยี่ยมสำหรับแนวทางในการสร้าง RESTful JSON API:

http://jsonapi.org/

สำหรับสิ่งที่มันคุ้มค่านอกจากนี้ผมยังได้เปิดตัวผลิตภัณฑ์ API สำหรับ Joomla 3.4.x เรียก Capi http://getcapi.org

ความแตกต่างหลักที่นี่คือฉัน staked กรอบงานการผลิตของฉันในบางไมโครเฟรม สิ่งนี้ทำให้ฉันสามารถรวมเฟรมเวิร์กแอพพลิเคชั่น Joomla ที่ได้ลองและทดสอบไปแล้ว ฉันยังสร้างสถาปัตยกรรมปลั๊กอินสำหรับเส้นทางบริการเปิดประตูสำหรับโปรแกรมเสริมและความปลอดภัยของบริการบนเว็บ

คุณสามารถค้นหาข้อมูลเพิ่มเติมจากโพสต์อื่น ๆ ได้ที่นี่:

/programming/26340885/rest-api-for-joomla-3-0/32706378#32706378

แจ้งให้เราทราบหากคุณมีคำถามใด ๆ

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