ݺߣ

ݺߣShare a Scribd company logo
البرمجيّات الحرّة و بناء واجهات التطبيق 
البرمجيّة ) API .) 
يوم البرمجيّات الحرّة.
حول المتحدّث. 
• حسام الزغيبي. 
• مطوّر لتطبيقات الويب و الجوّال. 
• مهتم بالبرمجيّات الحرّة و مفتوحة المصدر. 
•@hossamzee .
المحتويات. 
• الواجهة البرمجيّة للتطبيق ) API .) 
• الفرق بين خوادم الويب سابقاً و الآن. 
•VirtualBox, Vagrant, Ubuntu 14.04 . 
•.MySQL, PostgreSQL, PHP5.5, Nginx 
•Redis, Memcached . 
•Composer, Symfony, Laravel . 
• واجهة برمجيّة لتطبيق TODO . 
• أسئلة.
الواجهة البرمجيّة للتطبيق ) API .) 
https://api.car.app/v1
.RESTful API 
• مصادر أو أسماء عوضاً عن أفعال. 
• يستفاد من فعل HTTP لتحديد نوع الطلب. 
•get_users/GET (not) users/ GET .
خوادم الويب في وقتٍ ماضٍ . 
Server 
Linux (L) 
Apache (A) 
MySQL (M) 
PHP 
(P)
خوادم الويب الآن. 
Static Website Nginx, Modsecurity, Openssl 
Queue Redis 
Background Workers Libcurl 
User Database MySQL, PostgreSQL 
API endpoint 
Laravel 
Analytics Database Hadoop, Hive, Thrift, OpenJDK 
Web frontend
.VirtualBox 
• صندوق/محاكي افتراضي. 
•Virtualization . 
•GNU General Public License (GPL) version 2 .
.Vagrant 
• و ،جاتنلإا ةداعلإو ،لقنلل ةلباق ريوطت تائيب دادعإ و ءاشنإ 
خفيفة. 
•The MIT License . 
أعدّ ) Set Up .) 
كوّن 
( Configure .) 
اعمل ) Work .)
.Ubuntu 14.04 
• مداخ Ubuntu ، توزيعة Debian . 
•GNU General Public License (GPL) .
.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 .
PostgreSQL . 
• نظام إدارة قواعد بيانات العناصر العلائقيّة ) ORDBMS .) 
•PostgreSQL License, BSD, MIT licences .
PHP5.5 . 
• لغة شائعة الاستخدام، لغة سكربتات، متعدّدة الأغراض، 
مناسبة تحديداً في تطوير الويب. 
• سريعة، مرنة، نفعيّة ) Pragmatic (، تشغّل كل شيء بدءً من 
مدوّنتك و انتهاءً بأقوى مواقع الإنترنت في العالم. 
•The PHP License, version 3.01 .
.Nginx 
• سيكع ضّوفم ( Reverse Proxy ( لبروتوكولات HTTP ، HTTPS ، 
SMTP ، POP3 ، وَ IMAP ، موازنة التحميل ) Load Balancing ،) 
تخبأة HTTP ( Cache .) 
•.Berkeley Software Distribution licenses (BSD) 
Internet 
Proxy 
Web server
.Redis 
• مخزن و مخبأ مفتاح-و-قيمة متقدّم، عادةً يسمّى خادم تركيب 
بيانات، يحوي نصوص، قوائم، وغيرها. 
•.Berkeley Software Distribution licenses (BSD)
.Memcached 
• مخزن مفتاح-و-قيمة للبيانات الصغيرة )النصوص، و العناصر( 
لنتائج استدعاءات قاعدة البيانات، أو API ، أو تقديم الصفحة. 
•.Berkeley Software Distribution licenses (BSD)
.Composer 
• في تاّيدماتعلاا ريدم PHP . 
•.MIT license
Symfony . 
• مجموعة من مكوّنات PHP القابلة لإعادة الاستخدام، و منصّة 
PHP لمشاريع الويب. 
•MIT license .
Laravel . 
• منصّة PHP لصنّاع الويب. 
•MIT license .
Laravel Homestead . 
• حزمة Vagrant معدّة مسبقاً، “صندوق”.
واجهة برمجيّة لتطبيق TODO . 
•api-todo-github.com/akuzemchak/laracon://https . 
• جميع الردود على هيئة JSON .
رموز الردّ . 
الكود 
المعنى 
200 
نجاح. 
201 
نجاح في إنشاء المورد. 
204 
نجاح دون ردّ بمحتوى. 
400 
خطأ في الطلب. 
401 
مفتاح API غير صحيح. 
403 
غير مرخّص أو ممنوع. 
404 
غير موجود. 
500 
خطأ في الخادم.
نقاط نهاية 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
إعداد الخادم المحلّّ وَ Laravel ( 1 .) 
cd /home/hossamzee/Codes 
composer create-project laravel/laravel todo --prefer-dist 
vagrant box add laravel/homestead 
git clone https://github.com/laravel/homestead.git Homestead
إعداد الخادم المحلّّ وَ Laravel ( 2 .) 
Homestead/Homestead.yaml 
sites: - map: todo.local to: /home/vagrant/Codes/todo/public hhvm: true 
/etc/hosts 
127.0.0.1 todo.local
جداول قاعدة البيانات ) 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'); 
}); 
}
ترشيح المسار ) 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); 
});
GET . 
app/routes.php 
// Get all lists 
Route::get('lists', function() 
{ 
$lists = Auth::user()->tasklists; 
return Response::json($lists->toArray()); 
});
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); 
});
.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+');
.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+');
اختبار .API 
curl -u “key:pass" http://todo.local:8000/v1/lists
المصادر. 
https://ar.wikipedia.org/wiki/%D9%88%D8%A7%D8% AC%D9%87%D8%A9_%D8%A8%D8%B1%D9%85%D8%AC%D8%A9_%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA 
https://www.youtube.com/watch?v=ZzQfxoMFH0U 
https://en.wikipedia.org/wiki/Reverse_proxy 
http://www.youtube.com/watch?v=llpr5924N7E 
https://www.vagrantup.com/ 
https://www.virtualbox.org/ 
http://www.ubuntu.com/ 
http://www.mysql.com/ 
http://www.postgresql.org/ 
http://www.php.net/ 
https://en.wikipedia.org/wiki/Nginx 
http://redis.io/ 
http://memcached.org/ 
https://getcomposer.org/ 
http://symfony.com/ 
http://laravel.com/ 
https://github.com/akuzemchak/laracon-todo-api
أسئلة.
شكراً لكم.

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 . • أسئلة.
  • 4. الواجهة البرمجيّة للتطبيق ) API .) https://api.car.app/v1
  • 5. .RESTful API • مصادر أو أسماء عوضاً عن أفعال. • يستفاد من فعل HTTP لتحديد نوع الطلب. •get_users/GET (not) users/ GET .
  • 6. خوادم الويب في وقتٍ ماضٍ . Server Linux (L) Apache (A) MySQL (M) PHP (P)
  • 7. خوادم الويب الآن. Static Website Nginx, Modsecurity, Openssl Queue Redis Background Workers Libcurl User Database MySQL, PostgreSQL API endpoint Laravel Analytics Database Hadoop, Hive, Thrift, OpenJDK Web frontend
  • 8. .VirtualBox • صندوق/محاكي افتراضي. •Virtualization . •GNU General Public License (GPL) version 2 .
  • 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 .
  • 14. .Nginx • سيكع ضّوفم ( Reverse Proxy ( لبروتوكولات HTTP ، HTTPS ، SMTP ، POP3 ، وَ IMAP ، موازنة التحميل ) Load Balancing ،) تخبأة HTTP ( Cache .) •.Berkeley Software Distribution licenses (BSD) Internet Proxy Web server
  • 15. .Redis • مخزن و مخبأ مفتاح-و-قيمة متقدّم، عادةً يسمّى خادم تركيب بيانات، يحوي نصوص، قوائم، وغيرها. •.Berkeley Software Distribution licenses (BSD)
  • 16. .Memcached • مخزن مفتاح-و-قيمة للبيانات الصغيرة )النصوص، و العناصر( لنتائج استدعاءات قاعدة البيانات، أو API ، أو تقديم الصفحة. •.Berkeley Software Distribution licenses (BSD)
  • 17. .Composer • في تاّيدماتعلاا ريدم PHP . •.MIT license
  • 18. Symfony . • مجموعة من مكوّنات PHP القابلة لإعادة الاستخدام، و منصّة PHP لمشاريع الويب. •MIT license .
  • 19. Laravel . • منصّة PHP لصنّاع الويب. •MIT license .
  • 20. Laravel Homestead . • حزمة Vagrant معدّة مسبقاً، “صندوق”.
  • 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
  • 24. إعداد الخادم المحلّّ وَ Laravel ( 1 .) cd /home/hossamzee/Codes composer create-project laravel/laravel todo --prefer-dist vagrant box add laravel/homestead git clone https://github.com/laravel/homestead.git Homestead
  • 25. إعداد الخادم المحلّّ وَ Laravel ( 2 .) Homestead/Homestead.yaml sites: - map: todo.local to: /home/vagrant/Codes/todo/public hhvm: true /etc/hosts 127.0.0.1 todo.local
  • 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+');
  • 32. اختبار .API curl -u “key:pass" http://todo.local:8000/v1/lists
  • 33. المصادر. https://ar.wikipedia.org/wiki/%D9%88%D8%A7%D8% AC%D9%87%D8%A9_%D8%A8%D8%B1%D9%85%D8%AC%D8%A9_%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA https://www.youtube.com/watch?v=ZzQfxoMFH0U https://en.wikipedia.org/wiki/Reverse_proxy http://www.youtube.com/watch?v=llpr5924N7E https://www.vagrantup.com/ https://www.virtualbox.org/ http://www.ubuntu.com/ http://www.mysql.com/ http://www.postgresql.org/ http://www.php.net/ https://en.wikipedia.org/wiki/Nginx http://redis.io/ http://memcached.org/ https://getcomposer.org/ http://symfony.com/ http://laravel.com/ https://github.com/akuzemchak/laracon-todo-api