يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء...
TRANSCRIPT
الربمجيّات الحرّة و بناء واجهات التطبيق (.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
.Debian، توزيعة Ubuntuخادم •
•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
، HTTP ،HTTPSلربوتوكوالت ( Reverse Proxy)مفّوض عكيس •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
.غري صحيح APIمفتاح 401
.غري مرّخص أو ممنوع 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
.أسئلة
.شكراً لكم