عرضٌ تقديميّ موجّه للمطوّرين، يعطي نبذةً و تعرفةً عن الواجهات البرمجيّة للتطبيق (API)، و خوادم الويب الحاليّة و السابقة، و بعض الأدوات مفتوحة المصدر المستخدمة في بناء مثل هذه الواجهات، و مثالاً مبسّطاً لها.
1 of 35
Downloaded 23 times
More Related Content
يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)
1. البرمجيّات الحرّة و بناء واجهات التطبيق
البرمجيّة ) API .)
يوم البرمجيّات الحرّة.
2. حول المتحدّث.
• حسام الزغيبي.
• مطوّر لتطبيقات الويب و الجوّال.
• مهتم بالبرمجيّات الحرّة و مفتوحة المصدر.
•@hossamzee .
3. المحتويات.
• الواجهة البرمجيّة للتطبيق ) API .)
• الفرق بين خوادم الويب سابقاً و الآن.
•VirtualBox, Vagrant, Ubuntu 14.04 .
•.MySQL, PostgreSQL, PHP5.5, Nginx
•Redis, Memcached .
•Composer, Symfony, Laravel .
• واجهة برمجيّة لتطبيق TODO .
• أسئلة.
9. .Vagrant
• و ،جاتنلإا ةداعلإو ،لقنلل ةلباق ريوطت تائيب دادعإ و ءاشنإ
خفيفة.
•The MIT License .
أعدّ ) Set Up .)
كوّن
( Configure .)
اعمل ) Work .)
10. .Ubuntu 14.04
• مداخ Ubuntu ، توزيعة Debian .
•GNU General Public License (GPL) .
11. .MySQL
• ةّيقئلاعلا تانايبلا دعاوق ةرادإ ماظن ( RDBMS (، الثانيّ في
الاستخدام عالميّا *.
•GNU General Public License (GPL) .
* Following SQLite, which is deployed with every Android and iPhone device along with the Chrome and Firefox browsers. In the second quarter of 2013 alone, 213 million smartphones shipped, of which 200 million were Android and iOS .
12. PostgreSQL .
• نظام إدارة قواعد بيانات العناصر العلائقيّة ) ORDBMS .)
•PostgreSQL License, BSD, MIT licences .
13. PHP5.5 .
• لغة شائعة الاستخدام، لغة سكربتات، متعدّدة الأغراض،
مناسبة تحديداً في تطوير الويب.
• سريعة، مرنة، نفعيّة ) Pragmatic (، تشغّل كل شيء بدءً من
مدوّنتك و انتهاءً بأقوى مواقع الإنترنت في العالم.
•The PHP License, version 3.01 .
15. .Redis
• مخزن و مخبأ مفتاح-و-قيمة متقدّم، عادةً يسمّى خادم تركيب
بيانات، يحوي نصوص، قوائم، وغيرها.
•.Berkeley Software Distribution licenses (BSD)
16. .Memcached
• مخزن مفتاح-و-قيمة للبيانات الصغيرة )النصوص، و العناصر(
لنتائج استدعاءات قاعدة البيانات، أو API ، أو تقديم الصفحة.
•.Berkeley Software Distribution licenses (BSD)
21. واجهة برمجيّة لتطبيق TODO .
•api-todo-github.com/akuzemchak/laracon://https .
• جميع الردود على هيئة JSON .
22. رموز الردّ .
الكود
المعنى
200
نجاح.
201
نجاح في إنشاء المورد.
204
نجاح دون ردّ بمحتوى.
400
خطأ في الطلب.
401
مفتاح API غير صحيح.
403
غير مرخّص أو ممنوع.
404
غير موجود.
500
خطأ في الخادم.
23. نقاط نهاية API .
المسار
الفعل
/v1/lists
GET
/v1/lists
POST
/v1/lists/{id}
GET
/v1/lists/{id}
PUT
/v1/lists/{id}
DELETE
/v1/lists/{id}/tasks
GET
/v1/lists/{id}/tasks
POST
/v1/lists/{id}/tasks/{taskid}
GET
/v1/lists/{id}/tasks/{taskid}
PUT
/v1/lists/{id}/tasks/{taskid}
DELETE
26. جداول قاعدة البيانات ) Migrations .)
app/database/migrations/2013_01_31_141613_create_tasks.php
public function up()
{
Schema::create('tasks', function($table)
{
$table->increments('id');
$table->integer('list_id')->unsigned();
$table->string('description');
$table->boolean('completed');
$table->timestamps();
$table->foreign('list_id')->references('id')->on('lists')- >onDelete('cascade')->onUpdate('cascade');
});
}
27. ترشيح المسار ) Route filtering .)
app/filters.php
Route::filter('api.auth', function()
{
if (!Request::getUser())
{
App::abort(401, 'A valid API key is required');
}
$user = User::where('api_key', '=', Request::getUser())->first();
if (!$user)
{
App::abort(401);
}
Auth::login($user);
});
28. GET .
app/routes.php
// Get all lists
Route::get('lists', function()
{
$lists = Auth::user()->tasklists;
return Response::json($lists->toArray());
});
29. POST .
app/routes.php
// Create new list
Route::post('lists', function()
{
$list = new TaskList(Input::get());
$list->validate();
$list->user_id = Auth::user()->id;
if (!$list->save())
{
App::abort(500, 'List was not saved');
}
return Response::json($list->toArray(), 201);
});
30. .PUT
app/routes.php
// Update list by ID
Route::put('lists/{id}', function($id)
{
$list = TaskList::findByOwnerAndId(Auth::user(), $id);
$list->fill(Input::get());
$list->validate();
if (!$list->save())
{
App::abort(500, 'List was not updated');
}
return Response::json($list->toArray());
})->where('id', 'd+');
31. .DELETE
app/routes.php
// Delete list by ID
Route::delete('lists/{id}', function($id)
{
$list = TaskList::findByOwnerAndId(Auth::user(), $id);
$list->delete();
return Response::make(null, 204);
})->where('id', 'd+');