استكشفت سلسلة SitePoint هذه مبادئ REST. توضح هذه المقالة بناء خدمة ويب مريحة باستخدام Slim ، وهي شركة PHP Micro-Framework مستوحاة من Sinatra (Ruby). إن طبيعة Slim خفيفة الوزن ، مع المكونات الأساسية مثل التوجيه ، ومعالجة الطلب/الاستجابة ، ودعم العرض الحد الأدنى ، تجعلها مثالية لواجهة برمجة تطبيقات REST البسيطة.
مفاهيم المفاتيح:
post ()
، put ()
، و حذف ()
طرق لإنشاء وتحديث وحذف سجلات الكتاب على التوالي. تقديم Slim:
ابدأ بتنزيل Slim. يستخدم هذا المثال نمط 5.3. Create index.php
:
get("/", function () {
echo "Hello Slim World
";
});
$app->run();
?>
الوصول index.php
في متصفحك يعرض "Hello Slim World". التحميل التلقائي النحيف الملفات اللازمة. يقبل المُنشئ النحيف التكوين (على سبيل المثال ، الوضع
، templates.path
، عرض
). الوضع
يعين البيئة (التطوير/الإنتاج) ، و templates.path
يحدد دليل القالب. يمكن أن تستبدل معالجات العرض المخصصة الافتراضي slim_view
. مثال:
"development",
"TEMPLATES.PATH" => "./templates"
));
?>
إنشاء الطريق أمر بالغ الأهمية. ROUTES MAP URIS إلى وظائف رد الاتصال بناءً على طرق HTTP. يحمل النحافة الأولوية للطريق الأول المطابق ؛ الطلبات التي لا مثيل لها تؤدي إلى خطأ 404. بعد تحديد الطرق ، اتصل Run ()
لبدء التطبيق.
بناء خدمة مكتبة:
لننشئ خدمة إدارة المكتبة. Notorm يبسط تفاعل قاعدة البيانات (يتطلب مثيل PDO).
كتب قائمة:
يسرد نقطة النهاية هذه جميع الكتب بتنسيق JSON:
get("/books", function () use ($app, $db) {
$books = array();
foreach ($db->books() as $book) {
$books[] = array(
"id" => $book["id"],
"title" => $book["title"],
"author" => $book["author"],
"summary" => $book["summary"]
);
}
$app->response()->header("Content-Type", "application/json");
echo json_encode($books);
});
// ... (rest of the code) ...
GET ()
مقالات الحصول على طلبات. استخدم
يسمح بالوصول إلى المتغيرات الخارجية داخل الدالة المجهولة. يتم تعيين رأس الاستجابة على التطبيق
استرداد كتاب بالمعرف:
get ("/book/: id" ، function ($ id) استخدم ($ app ، $ db) { $ app-> response ()-> header ("content-type" ، "application/json") ؛ $ book = $ db-> books ()-> حيث ("id" ، $ id) ؛ if ($ data = $ book-> fetch ()) { echo json_encode (صفيف ( "id" => $ Data ["id"] ، "العنوان" => $ بيانات ["العنوان"] ، "مؤلف" => $ بيانات ["مؤلف"] ، "ملخص" => $ بيانات ["ملخص"] ) ؛ } آخر { echo json_encode (صفيف ( "الحالة" => خطأ ، "الرسالة" => "معرف المعرف $ غير موجود" ) ؛ } }) ؛ // ... (بقية الكود) ...
get("/book/:id", function ($id) use ($app, $db) {
$app->response()->header("Content-Type", "application/json");
$book = $db->books()->where("id", $id);
if ($data = $book->fetch()) {
echo json_encode(array(
"id" => $data["id"],
"title" => $data["title"],
"author" => $data["author"],
"summary" => $data["summary"]
));
} else {
echo json_encode(array(
"status" => false,
"message" => "Book ID $id does not exist"
));
}
});
// ... (rest of the code) ...
: معرف إلى وظيفة رد الاتصال. المعلمات الاختيارية استخدم /book (/: id)
. للحصول على معلمات اختيارية بدون وسيطات رد اتصال صريحة ، استخدم func_get_args ()
.
post ()
يضيف ، و put ()
تحديث الكتب:
post("/book", function () use ($app, $db) {
$app->response()->header("Content-Type", "application/json");
$book = $app->request()->post();
$result = $db->books->insert($book);
echo json_encode(array("id" => $result["id"]));
});
$app->put("/book/:id", function ($id) use ($app, $db) {
$app->response()->header("Content-Type", "application/json");
$book = $db->books()->where("id", $id);
if ($book->fetch()) {
$post = $app->request()->put();
$result = $book->update($post);
echo json_encode(array(
"status" => (bool)$result,
"message" => "Book updated successfully"
));
} else {
echo json_encode(array(
"status" => false,
"message" => "Book id $id does not exist"
));
}
});
// ... (rest of the code) ...
$ app-> request ()-> post () و $ app-> request ()-> put ()
استرداد المنشور ووضع البيانات على التوالي. للحصول على طلبات PUT المستندة إلى المتصفح ، استخدم حقلًا مخفيًا _ الطريقة
ذات قيمة "وضع" في النموذج الخاص بك.
حذف كتاب بالمعرف:
delete ("/book/: id" ، function ($ id) استخدم ($ app ، $ db) { $ app-> response ()-> header ("content-type" ، "application/json") ؛ $ book = $ db-> books ()-> حيث ("id" ، $ id) ؛ if ($ book-> fetch ()) { $ result = $ book-> delete () ؛ echo json_encode (صفيف ( "الحالة" => صحيح ، "رسالة" => "تم حذف الكتاب بنجاح" ) ؛ } آخر { echo json_encode (صفيف ( "الحالة" => خطأ ، "الرسالة" => "معرف المعرف $ غير موجود" ) ؛ } }) ؛ // ... (بقية الكود) ...
delete("/book/:id", function ($id) use ($app, $db) {
$app->response()->header("Content-Type", "application/json");
$book = $db->books()->where("id", $id);
if ($book->fetch()) {
$result = $book->delete();
echo json_encode(array(
"status" => true,
"message" => "Book deleted successfully"
));
} else {
echo json_encode(array(
"status" => false,
"message" => "Book id $id does not exist"
));
}
});
// ... (rest of the code) ...
DELETE () تزيل سجل قاعدة البيانات. تتولى طريقة MAP ()
طرق HTTP متعددة على مسار واحد (غير مبين هنا).
توضح هذه المقالة بناء خدمة ويب أساسية مع Slim. يجب أن يشمل المزيد من التطوير معالجة الأخطاء القوية والتحقق من صحة المدخلات. يمكن العثور على الرمز المصدر (غير المدرج هنا) على Github (الرابط غير المقدم في النص الأصلي). تم حذف قسم الأسئلة الشائعة في النص الأصلي لأنه يوفر معلومات أساسية متاحة بسهولة من خلال وثائق Slim.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3