يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء...

35
التطبيقجهاتء وا ة و بناّ ت الحر اّ مجي ال ةّ مجي ال( API .) ةّ ت الحر اّ مجي يوم ال.

Transcript of يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء...

Page 1: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

الربمجيّات الحرّة و بناء واجهات التطبيق (.API)الربمجيّة

.يوم الربمجيّات الحرّة

Page 2: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.حول املتحّدث

.حسام الزغيبي•

.مطّور لتطبيقات الويب و الجّوال•

.مهتم بالربمجيّات الحرّة و مفتوحة املصدر•

•@hossamzee.

Page 3: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.املحتويات

(.API)الواجهة الربمجيّة للتطبيق •

.الفرق بني خوادم الويب سابقاً و اآلن•

•VirtualBox, Vagrant, Ubuntu 14.04.

•.MySQL, PostgreSQL, PHP5.5, Nginx

•Redis, Memcached.

•Composer, Symfony, Laravel.

.TODOواجهة برمجيّة لتطبيق •

.أسئلة•

Page 4: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

(.API)الواجهة الربمجيّة للتطبيق

https://api.car.app/v1

Page 5: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.RESTful API

.مصادر أو أسامء عوضاً عن أفعال•

.لتحديد نوع الطلب HTTPيستفاد من فعل •

•get_users/GET (not) users/ GET.

Page 6: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.خوادم الويب يف وقٍت ماٍض

Server

Linux

(L)

Apache

(A)

MySQL

(M)

PHP

(P)

Page 7: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.خوادم الويب اآلن

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

Page 8: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.VirtualBox

.محايك افرتايض/صندوق•

•Virtualization.

•GNU General Public License (GPL) version 2.

Page 9: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.Vagrant

إنشاء و إعداد بيئات تطوير قابلة للنقل، وإلعادة اإلنتاج، و • .خفيفة

•The MIT License.

(.Set Up)أعّد كّون

(Configure.) (.Work)اعمل

Page 10: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.Ubuntu 14.04

.Debian، توزيعة Ubuntuخادم •

•GNU General Public License (GPL).

Page 11: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.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.

Page 12: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

PostgreSQL.

(.ORDBMS)نظام إدارة قواعد بيانات العنارص العالئقيّة •

•PostgreSQL License, BSD, MIT licences.

Page 13: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

PHP5.5.

لغة شائعة االستخدام، لغة سكربتات، متعّددة األغراض، • .مناسبة تحديداً يف تطوير الويب

تشّغل كل يشء بدًء من ، (Pragmatic)نفعيّة رسيعة، مرنة، • .مدّونتك و انتهاًء بأقوى مواقع اإلنرتنت يف العامل

•The PHP License, version 3.01.

Page 14: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.Nginx

، HTTP ،HTTPSلربوتوكوالت ( Reverse Proxy)مفّوض عكيس •SMTP ،POP3 َو ،IMAP موازنة التحميل ،(Load Balancing) ، HTTP (Cache.)تخبأة

•.Berkeley Software Distribution licenses (BSD)

Internet Proxy Web server

Page 15: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.Redis

قيمة متقّدم، عادًة يسّمى خادم تركيب -و-مخزن و مخبأ مفتاح• .بيانات، يحوي نصوص، قوائم، وغريها

•.Berkeley Software Distribution licenses (BSD)

Page 16: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.Memcached

( النصوص، و العنارص)قيمة للبيانات الصغرية -و-مخزن مفتاح• .، أو تقديم الصفحةAPIلنتائج استدعاءات قاعدة البيانات، أو

•.Berkeley Software Distribution licenses (BSD)

Page 17: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.Composer

.PHPمدير االعتامديّات يف •

•.MIT license

Page 18: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

Symfony.

منّصة القابلة إلعادة االستخدام، و PHPمجموعة من مكّونات •PHP ملشاريع الويب.

•MIT license.

Page 19: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

Laravel.

.لصنّاع الويب PHPمنّصة •

•MIT license.

Page 20: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

Laravel Homestead.

.”صندوق“معّدة مسبقاً، Vagrantحزمة •

Page 22: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.رموز الردّ

املعنى الكود

.نجاح 200

.املورد نجاح يف إنشاء 201

.دون رّد مبحتوى نجاح 204

.خطأ يف الطلب 400

.غري صحيح APIمفتاح 401

.غري مرّخص أو ممنوع 403

.غري موجود 404

.يف الخادم خطأ 500

Page 23: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.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

Page 24: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

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

Page 25: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

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

Page 26: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

(.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'); }); }

Page 27: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

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

Page 28: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

GET.

app/routes.php

// Get all lists Route::get('lists', function() { $lists = Auth::user()->tasklists; return Response::json($lists->toArray()); });

Page 29: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

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

Page 30: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.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+');

Page 31: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.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+');

Page 32: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

API.اختبار

curl -u “key:pass" http://todo.local:8000/v1/lists

Page 33: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.املصادر

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

Page 34: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.أسئلة

Page 35: يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة (API)

.شكراً لكم