‫حق‬ ‫بسمه‬
/
Mariadb Oracle Mysql
Api
‫دخت‬ ‫اسمعیل‬ ‫یاشار‬ ‫مهندس‬ : ‫نویسنده‬
: ‫نسخه‬
0.1
: ‫نویسنده‬ ‫درباره‬
‫رشته‬ ‫آموخته‬ ‫دانش‬ ‫دخت‬ ‫اسمعیل‬ ‫یاشار‬ ‫بنده‬
cyber security
. ‫هستم‬
‫از‬ ‫بیش‬
16
. ‫دارم‬ ‫فعالیت‬ ‫سابقه‬ ‫سال‬
‫مولف‬ - ‫مدرس‬ - ‫مشاور‬ : ‫داد‬ ‫شرح‬ ‫زیر‬ ‫های‬ ‫ساختار‬ ‫در‬ ‫میتوان‬ ‫را‬ ‫بنده‬ ‫های‬ ‫فعالیت‬ ‫جمله‬ ‫از‬
/ / / / / /
Devops Platform Cloud Eng |Gnu Linux System Network Security Storage
/ /
Engineer Admin architecture & Oracle Dba | Linux Trainer |Consultant
): ‫جدید‬ ‫دنیاهای‬ ‫کشف‬ ‫و‬ ‫تحقیق‬ ‫و‬ ‫مطالعه‬ ‫به‬ ‫مند‬ ‫عالقه‬
. ‫کنم‬ ‫اشاره‬ ‫استراتژی‬ ‫های‬ ‫بازی‬ ‫و‬ ‫اوتلو‬ ‫و‬ ‫شطرنج‬ ‫بازی‬ ‫به‬ ‫میتوانم‬ ‫من‬ ‫های‬ ‫سرگرمی‬ ‫از‬ ‫واقع‬ ‫در‬
‫تبریز‬ ‫الگ‬ ‫گذاران‬ ‫بنیان‬ ‫از‬ ‫یکی‬ ‫و‬ ‫لینوکس‬/‫گنو‬ ‫و‬ ‫باز‬ ‫متن‬ ‫دنیای‬ ‫عاشق‬ . ‫هستم‬ ‫عاشق‬ ‫یک‬ ‫من‬
: ‫کنید‬ ‫پیدا‬ ‫و‬ ‫کنید‬ ‫دنبال‬ ‫را‬ ‫من‬ ‫میتوانید‬ ‫چطور‬ ‫خب‬
: +9809991057856
Mob
Telegram ID : yashar_esm
Telegram channel : unixmens
Instagram Account
Linkedin Account :/ /
in yashar_esmaildokht
: ‫مشاوره‬
. ‫بود‬ ‫خواهم‬ ‫شما‬ ‫دسترس‬ ‫در‬ ‫من‬ . ‫فرمایید‬ ‫حاصل‬ ‫تماس‬ . ‫کردم‬ ‫اشاره‬ ‫قبل‬ ‫صفحه‬ ‫در‬ ‫که‬ ‫هایی‬ ‫کانال‬ ‫از‬ ‫میتوانید‬ ‫مشاوره‬ ‫جهت‬
: ‫به‬ ‫تقدیم‬
‫خدا‬
‫شتافت‬ ‫یاریم‬ ‫به‬ ‫که‬ ‫بود‬ ‫او‬ ‫تنها‬ ‫هایم‬ ‫سختی‬ ‫در‬ ‫که‬ ‫چرا‬
‫مادرم‬
‫اویم‬ ‫مدیون‬ ‫که‬ ‫را‬ ‫حبت‬‫َم‬ ‫و‬ ‫انسانیت‬ ‫داد‬ ‫یاد‬ ‫و‬ . ‫کرد‬ ‫تقدیم‬ ‫زندگی‬ ‫به‬ ‫مرا‬ ‫که‬ ‫چرا‬
‫پدرم‬
‫اویم‬ ‫مدیون‬ ‫و‬ ‫بود‬ ‫من‬ ‫حامی‬ ‫همیشه‬ ‫روحش‬ ‫که‬
‫عشقم‬
‫هست‬ ‫و‬ ‫بود‬ ‫مشوقم‬ ‫که‬
‫سورس‬ ‫اپن‬ ‫جامعه‬
‫بشریت‬
‫را‬ ‫هایش‬ ‫دانسته‬ ‫میکند‬ ‫منتشر‬ ‫و‬ ‫میخواند‬ ‫که‬ ‫او‬ ‫و‬
): ‫هیچ‬ ‫دیگر‬ ‫و‬ ‫جهانی‬ ‫صلح‬ ‫امید‬ ‫به‬ ‫و‬
‫مینویسم‬
‫تا‬
‫بمانم‬
‫لینوکس‬ ‫و‬ ‫گنو‬ ‫تاریخچه‬
“ ‫مخفف‬ ‫گنو‬ .‫‌باشد‬
‫ی‬‫م‬ ‫سازگار‬ ‫یونیکس‬ ‫با‬ ‫‌ای‬
‫ه‬‫فزایند‬ ‫طــور‬ ‫به‬ ‫کــه‬ ‫بــوده‬ ‫آزاد‬ ‫کامال‬ ‫عامل‬ ‫سیــستم‬ ‫یک‬ ‫گنو‬ ‫عامل‬ ‫سیستم‬
’
GNU s Not
Unix
‫سپتامبر‬ ‫در‬ ‫را‬ ‫گنو‬ ‫پروژه‬ ‫اولیه‬ ‫اطالعیه‬ ‫استالمن‬ ‫ریچارد‬ .‫است‬ ”
۱۹۸۳
‫سپتامبر‬ ‫در‬ ‫گنو‬ ‫اعالمیه‬ ‫نام‬ ‫به‬ ‫آن‬ ‫‌تر‬
‫ل‬‫کام‬ ‫نسخه‬ .‫کرد‬ ‫منتشر‬
۱۹۸۵
.‫است‬ ‫شده‬ ‫ترجمه‬ ‫زبان‬ ‫چندین‬ ‫به‬ ‫که‬ ‫شد‬ ‫منتشر‬
“ ‫برای‬ ‫بازگشتی‬ ‫مخفف‬ ‫یک‬ ،‫نخست‬ ‫‌کند؛‬
‫ی‬‫م‬ ‫بــرطــرف‬ ‫را‬ ‫نیــازها‬ ‫از‬ ‫تعدادی‬ ‫که‬ ‫است‬ ‫شده‬ ‫انتخاب‬ ‫علت‬ ‫این‬ ‫به‬ »‫«گنو‬ ‫نام‬
’
GNU s Not
Unix
.‫است‬ ‫جالب‬ ‫آن‬ )‫خواندن‬ ‫(یا‬ ‫گفتن‬ ‫آهنگ‬ ،‫سوم‬ ،‫است‬ ‫واقعی‬ ‫کلمه‬ ‫یک‬ ،‫دوم‬ ،‫است‬ ”
‫یا‬ ‫بپردازید‬ ‫مبلغی‬ ‫است‬ ‫ممکن‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫آوردن‬ ‫دست‬ ‫به‬ ‫برای‬ ‫شما‬ .‫قیمت‬ ‫نه‬ ،‫‌کند‬
‫ی‬‫م‬ ‫اشاره‬ ‫آزادی‬ ‫به‬ »‫آزاد‬ ‫‌افزار‬
‫م‬‫«نر‬ ‫در‬ »‫«آزاد‬ ‫کلمه‬
‫آزادی‬ ،‫نخست‬ .‫داشت‬ ‫خواهید‬ ‫آن‬ ‫از‬ ‫استفاده‬ ‫برای‬ ‫ویــژه‬ ‫آزادی‬ ‫ســه‬ ،‫باشید‬ ‫داشتــه‬ ‫اختیار‬ ‫در‬ ‫را‬ ‫‌افزار‬
‫م‬‫نر‬ ‫وقتـی‬ ،‫صورت‬ ‫هر‬ ‫در‬ .‫نپردازید‬
‫داشتن‬ ‫با‬ ،‫دلخواه‬ ‫طور‬ ‫به‬ ‫برنامه‬ ‫در‬ ‫تغییرات‬ ‫اعمال‬ ‫بــرای‬ ‫آزادی‬ ،‫دوم‬ ‫همــکاران؛‬ ‫و‬ ‫دوستان‬ ‫به‬ ‫آن‬ ‫دادن‬ ‫هدیه‬ ‫و‬ ‫برنامه‬ ‫از‬ ‫برداری‬ ‫نسخه‬ ‫برای‬
‫را‬ ‫گنو‬ ‫‌افزار‬
‫م‬‫نر‬ ‫مجددا‬ ‫(اگر‬ .‫جامعه‬ ‫ساخت‬ ‫به‬ ‫کمک‬ ‫نهایت‬ ‫در‬ ‫و‬ ‫یافته‬ ‫بهبود‬ ‫نسخه‬ ‫توزیع‬ ‫برای‬ ‫آزادی‬ ،‫سوم‬ ‫منبع؛‬ ‫کدهای‬ ‫به‬ ‫کامل‬ ‫دسترسی‬
.)‫کنید‬ ‫هدیه‬ ‫رایگان‬ ‫طور‬ ‫به‬ ‫را‬ ‫آنها‬ ‫یا‬ ‫و‬ ‫کنید‬ ‫دریافت‬ ‫را‬ ‫مبلغی‬ ‫نسخه‬ ‫یک‬ ‫انتقال‬ ‫فیزیکی‬ ‫کار‬ ‫بــرای‬ ‫‌تــوانـید‬
‫ی‬‫م‬ ،‫نمایید‬ ‫توزیع‬
‫ســال‬ ‫در‬ .‫‌شود‬
‫ی‬‫م‬ ‫نامیده‬ «‫گنو‬ ‫»پروژه‬ ،‫گنو‬ ‫سیستم‬ ‫توسعه‬ ‫پروژه‬
۱۹۸۳
‫در‬ ‫که‬ ‫همکاری‬ ‫روح‬ ‫بازگرداندن‬ ‫برای‬ ‫راهی‬ ‫عنوان‬ ‫به‬ ‫گنــو‬ ‫پــروژه‬
‫انحصاری‬ ‫‌افزارهای‬
‫م‬‫نر‬ ‫صاحبان‬ ‫توسط‬ ‫که‬ ‫موانع‬ ‫بردن‬ ‫بین‬ ‫از‬ ‫با‬ ‫تا‬ ‫شد‬ ‫ایجاد‬ ‫داشـت‬ ‫وجــود‬ ‫کامپیــوتر‬ ‫کاربران‬ ‫جامعه‬ ‫بین‬ ‫در‬ ‫نخست‬ ‫روزهای‬
.‫سازد‬ ‫ممکن‬ ‫را‬ ‫همکاری‬ ‫دیگر‬ ‫بار‬ ‫یک‬ ،‫بودند‬ ‫شده‬ ‫تحمیل‬
‫سال‬ ‫در‬
۱۹۷۱
‫دانشگاه‬ ‫در‬ ‫را‬ ‫خود‬ ‫کار‬ ‫استالمن‬ ‫ریچارد‬ ‫که‬ ‫هنگامی‬
MIT
‫استفاده‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫از‬ ‫منحصرا‬ ‫کــه‬ ‫گــروهی‬ ‫در‬ ،‫کرد‬ ‫آغاز‬
‫آزاد‬ ‫یکدیگر‬ ‫با‬ ‫همکاری‬ ‫در‬ ‫‌نویسان‬
‫ه‬‫بــرنام‬ .‫‌کــردند‬
‫ی‬‫م‬ ‫توزیع‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫اغلب‬ ‫نیز‬ ‫کامپیوتری‬ ‫‌های‬
‫ت‬‫شرک‬ ‫حتی‬ .‫پرداخت‬ ‫کار‬ ‫به‬ ‫‌کردند‬
‫ی‬‫م‬
.‫‌دادند‬
‫ی‬‫م‬ ‫انجام‬ ‫را‬ ‫کار‬ ‫همین‬ ‫نیز‬ ‫اغلب‬ ‫و‬ ‫بودند‬
‫دهه‬ ‫در‬
۱۹۸۰
‫منع‬ ‫را‬ ‫کاربزان‬ ‫توسط‬ ‫همکاری‬ ‫آنها‬ ‫مالکان‬ ‫و‬ ‫داشتند‬ ‫مالک‬ ‫که‬ ‫معنی‬ ‫این‬ ‫بــه‬ ،‫بودند‬ ‫انحصاری‬ ‫‌افزارها‬
‫م‬‫نر‬ ‫تمام‬ ‫تقریبا‬
.‫‌کرد‬
‫ی‬‫م‬ ‫ایجاب‬ ‫را‬ ‫گنو‬ ‫پروژه‬ ‫ضرورت‬ ‫کار‬ ‫این‬ ‫که‬ ‫‌کردند‬
‫ی‬‫م‬
‫‌توانید‬
‫ی‬‫نم‬ ‫حتی‬ ‫شـما‬ ،‫بــاشـد‬ ‫نـداشـته‬ ‫وجــود‬ ‫آزادی‬ ‫عامل‬ ‫سـیـستم‬ ‫اگــر‬ ‫دارند؛‬ ‫نیــاز‬ ‫عامل‬ ‫سیستم‬ ‫یــک‬ ‫به‬ ‫کامپیوتر‬ ‫کاربران‬ ‫تمام‬
‫عامل‬ ‫سیستم‬ ‫یک‬ ‫وجود‬ ،‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫در‬ ‫ضرورت‬ ‫اولیــن‬ ‫بنــابــراین‬ .‫کنید‬ ‫شروع‬ ‫را‬ ‫کامپیوتر‬ ‫با‬ ‫کار‬ ‫انحصاری‬ ‫‌افزارهای‬
‫م‬‫نر‬ ‫از‬ ‫استفاده‬ ‫بدون‬
.‫است‬ ‫آزاد‬
‫انتقال‬ ‫قابل‬ ‫و‬ ‫خورده‬ ‫محک‬ ‫قبال‬ ‫آن‬ ‫کلی‬ ‫طــراحی‬ ‫زیرا‬ ‫بساند‬ ‫یونیکس‬ ‫با‬ ‫منطبق‬ ‫عاملی‬ ‫سیستم‬ ‫تا‬ ‫گرفتند‬ ‫تصمیم‬ ‫آزاد‬ ‫افزاری‬ ‫نرم‬ ‫جنبش‬
.‫‌کرد‬
‫ی‬‫م‬ ‫آسان‬ ‫را‬ ‫گنو‬ ‫به‬ ‫یونیکس‬ ‫کاربران‬ ‫حرکت‬ ‫سازگاری‬ ‫این‬ ‫همچنین‬ ‫و‬ ،‫بود‬
،‫متن‬ ‫‌بندی‬
‫ب‬‫قال‬ ‫‌های‬
‫ه‬‫برنام‬ ،‫ویــرایشــگـرها‬ ،‫کامپــایـلرها‬ ‫شــامــل‬ ‫و‬ ‫اســت؛‬ ‫هسته‬ ‫یک‬ ‫از‬ ‫بیشتر‬ ‫خیلی‬ ‫یونیکس‬ ‫شبه‬ ‫عامل‬ ‫سیستم‬ ‫یک‬
‫ژانویه‬ ‫در‬ .‫است‬ ‫بزرگی‬ ‫بسیار‬ ‫کار‬ ‫کامل‬ ‫عامل‬ ‫سیستم‬ ‫یک‬ ‫نوشتن‬ ‫بنابرایـن‬ .‫‌باشد‬
‫ی‬‫م‬ ‫دیگر‬ ‫چیزهای‬ ‫خیلی‬ ‫و‬ ‫پستی‬ ‫‌افزارهای‬
‫م‬‫نر‬
۱۹۸۴
‫شروع‬
‫اکتبر‬ ‫در‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫بنیاد‬ .‫انجامید‬ ‫طول‬ ‫به‬ ‫سالها‬ ‫کردند‬ ‫کار‬ ‫به‬
۱۹۸۵
.‫شد‬ ‫تاسیس‬ ‫گنو‬ ‫توسعه‬ ‫به‬ ‫کمک‬ ‫جهت‬ ‫سرمایه‬ ‫جذب‬ ‫برای‬ ‫بیشتر‬
‫سال‬ ‫تا‬
۱۹۹۰
‫سال‬ ‫در‬ ،‫یونیکس‬ ‫شبه‬ ‫هسته‬ ‫یک‬ ،‫لینوکس‬ ‫سپس‬ . ‫یافتند‬ ‫دست‬ ‫هسته‬ ‫جــز‬ ‫بــه‬ ،‫عامل‬ ‫سیستم‬ ‫اصلی‬ ‫اجزای‬ ‫تمامی‬ ‫به‬
۱۹۹۱
‫ســال‬ ‫در‬ ‫و‬ ‫کرد‬ ‫پیدا‬ ‫توسعه‬ ‫تروالدز‬ ‫لینوس‬ ‫توسط‬
۱۹۹۲
‫گنو‬ ‫کامل‬ ‫تقریبا‬ ‫سیستم‬ ‫با‬ ‫لینوکس‬ ‫ترکیب‬ .‫شد‬ ‫آزاد‬ ‫‌افـزار‬
‫م‬‫نــر‬ ‫یــک‬
‫‌های‬
‫م‬‫سیست‬ ‫از‬ ‫نفر‬ ‫میلیون‬ ‫‌ها‬
‫ه‬‫د‬ ‫‌اکنون‬
‫م‬‫ه‬ ‫که‬ ‫‌شود‬
‫ی‬‫م‬ ‫زده‬ ‫تخمــین‬ .‫لینوکس‬/‫گنـو‬ ‫سیستم‬ :‫شد‬ ‫کــامل‬ ‫عامــل‬ ‫سیستم‬ ‫یک‬ ‫به‬ ‫منجر‬
.‫‌کنند‬
‫ی‬‫م‬ ‫استفاده‬ ‫غـیـره‬ ‫و‬ ‫ردهــت‬ ،‫دبیــان‬ ،‫اسلکور‬ ‫شــامــل‬ ،‫لینوکس‬/‫گنو‬
‫را‬ ‫‌افزارها‬
‫م‬‫نر‬ ‫از‬ ‫کامل‬ ‫مجموعه‬ ‫یک‬ ‫تا‬ ‫دارد‬ ‫نظر‬ ‫در‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫بنیاد‬ .‫است‬ ‫نشده‬ ‫محدود‬ ‫عامل‬ ‫سیستم‬ ‫یک‬ ‫به‬ ‫فقط‬ ‫گنو‬ ‫پروژه‬ ،‫حال‬ ‫این‬ ‫با‬
.‫‌شود‬
‫ی‬‫م‬ ‫نیز‬ ‫کاربردی‬ ‫‌افزارهای‬
‫م‬‫نـر‬ ‫شــامــل‬ ‫مــوضــوع‬ ‫ایــن‬ .‫باشند‬ ‫داشته‬ ‫‌خواهند‬
‫ی‬‫م‬ ‫کاربــران‬ ‫از‬ ‫بسیاری‬ ‫که‬ ‫آنچه‬ ‫هر‬ ، ‫کند‬ ‫ایجاد‬
‫بنیاد‬ ‫جهت‬ ‫همین‬ ‫به‬ ‫کنند‬ ‫تهیه‬ ‫‌افزار‬
‫م‬‫نر‬ ‫نیز‬ ‫ندارند‬ ‫مهارت‬ ‫کامپیـوتر‬ ‫زمینه‬ ‫در‬ ‫که‬ ‫کاربرانی‬ ‫برای‬ ‫دارد‬ ‫قصد‬ ‫همچنین‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫بنیاد‬
.‫کرد‬ ‫ایجاد‬ ،‫گنو‬ ‫سیستم‬ ‫از‬ ‫استفاده‬ ‫در‬ ‫‌کار‬
‫ه‬‫تاز‬ ‫کاربران‬ ‫به‬ ‫کمک‬ ‫منظور‬ ‫به‬ ‫گرافیکی‬ ‫کار‬ ‫میز‬ ‫یک‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬
.‫است‬ ‫دسترس‬ ‫در‬ ‫‌اکنون‬
‫م‬‫ه‬ ‫آزاد‬ ‫بازی‬ ‫تعدادی‬ .‫کند‬ ‫ایجاد‬ ‫نیز‬ ‫دیگــری‬ ‫تفریح‬ ‫ابزارهای‬ ‫و‬ ‫‌ها‬
‫ی‬‫باز‬ ‫‌خــواهد‬
‫ی‬‫م‬ ‫همچنین‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫بنیاد‬
‫به‬ ‫را‬ ‫گنو‬ ‫‌افزار‬
‫م‬‫نر‬ ،‫انحصاری‬ ‫سیستم‬ ‫مانند‬ ‫قوانینی‬ ‫که‬ ‫زمانی‬ ‫جز‬ ‫بـه‬ ،‫نـدارد‬ ‫وجــود‬ ‫محدودیتی‬ ‫هیچ‬ ‫برود؟‬ ‫پیش‬ ‫‌تواند‬
‫ی‬‫م‬ ‫کجا‬ ‫تا‬ ‫آزاد‬ ‫‌افزار‬
‫م‬‫نر‬
‫دهند‬ ‫انجام‬ ‫‌خواهند‬
‫ی‬‫م‬ ‫کامپیوتر‬ ‫کاربران‬ ‫که‬ ‫کارهایی‬ ‫تمام‬ ‫انجام‬ ‫برای‬ ‫آزاد‬ ‫‌افزارهای‬
‫م‬‫نر‬ ‫کردن‬ ‫فراهم‬ ‫نــهـایی‬ ‫هــدف‬ .‫کننــد‬ ‫منع‬ ‫کامل‬ ‫طور‬
.‫‌باشد‬
‫ی‬‫م‬ ‫انحصاری‬ ‫‌افزارهای‬
‫م‬‫نر‬ ‫کردن‬ ‫مطرود‬ ‫نتیجه‬ ‫در‬ ‫و‬
‫باز‬ ‫متن‬ ‫افزار‬ ‫نرم‬
Open Source
Software
‫مقدمه‬
‫قواعد‬ ‫گذاشته‬ ‫‌افزار‬
‫م‬‫نر‬ ‫اکوسیستم‬ ‫در‬ ‫‌گذاران‬
‫ه‬‫سرمای‬ ‫اقتصادی‬ ‫رفتار‬ ‫بر‬ ‫که‬ ‫‌ای‬
‫ه‬‫مالحظ‬ ‫قابل‬ ‫تأثیر‬ ‫با‬ ‫‌باز‬
‫ن‬‫مت‬ ‫افزار‬ ‫نرم‬
‫تولید‬ ‫فشار‬ ‫شرکتها‬ ،‫باشند‬ ‫کد‬ ‫کننده‬ ‫اعمال‬ ‫‌کنند‬
‫ی‬‫م‬ ‫سعی‬ ‫‌دهنگان‬
‫ه‬‫توسع‬ ‫تازه‬ ‫محیط‬ ‫این‬ ‫در‬ .‫است‬ ‫داده‬ ‫تغییر‬ ‫را‬ ‫بازی‬
.‫‌کشند‬
‫ی‬‫م‬ ‫را‬ ‫سرشاری‬ ‫سود‬ ‫انتظار‬ ‫سیستم‬ ‫فروشندگان‬ ‫و‬ ‫‌کنند‬
‫ی‬‫م‬ ‫حس‬ ‫را‬ ‫‌باز‬
‫ن‬‫مت‬ ‫محصوالت‬
۱
‫معرفی‬ .
‫فعل‬ ‫در‬ ‫عمده‬ ‫تغییراتی‬ ‫اتفاق‬ ‫این‬ .‫است‬ ‫آورده‬ ‫بار‬ ‫به‬ ‫کاربران‬ ‫برای‬ ‫ارزانتر‬ ‫‌افزار‬
‫م‬‫نر‬ ‫از‬ ‫بیش‬ ‫چیزی‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌افزار‬
‫م‬‫نر‬ ‫ظهور‬
.‫است‬ ‫کرده‬ ‫ایجاد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫حوزه‬ ‫بازیگران‬ ‫بین‬ ‫اقتصادی‬ ‫انفعال‬ ‫و‬
‫معنای‬ ‫به‬ ‫اما‬ ‫است‬ - ‫زندگی‬ ‫از‬ ‫سبکی‬ ‫حتی‬ ‫یا‬ - ‫‌افزار‬
‫م‬‫نر‬ ‫توسعه‬ ‫به‬ ‫ویژه‬ ‫نگاهی‬ ‫تجسم‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌افزار‬
‫م‬‫نر‬ ‫‌ها‬
‫ی‬‫خیل‬ ‫برای‬
‫جامعه‬ ‫رشد‬ ‫برای‬ ‫باید‬ ‫شرکتها‬ ‫که‬ ‫است‬ ‫این‬ ‫گابریل‬ ‫ریچارد‬ ‫و‬ ‫گلدمن‬ ‫ران‬ ‫پیشنهاد‬ .‫هست‬ ‫هم‬ ‫تجاری‬ ‫تدبیر‬ ‫نوعی‬
.‫نمایند‬ ‫ایجاد‬ ‫خدماتشان‬ ‫و‬ ‫محصوالت‬ ‫اطراف‬ ‫زنده‬ ‫محیطی‬ ‫و‬ ‫کنند‬ ‫استفاده‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌افزار‬
‫م‬‫نر‬ ‫از‬ ‫کاربرانشان‬
‫به‬ ‫است‬ ‫نیاز‬ ‫مورد‬ ‫کاربر‬ ‫احتیاجات‬ ‫با‬ ‫آن‬ ‫دادن‬ ‫تطبیق‬ ‫برای‬ ‫که‬ ‫را‬ ‫کد‬ ‫متن‬ ‫و‬ ‫است‬ ‫رایگان‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌افزار‬
‫م‬‫نر‬ ‫معمول‬ ‫بطور‬
‫مبلغی‬ ‫دریافت‬ ‫ازای‬ ‫در‬ ‫را‬ ‫ممکن‬ ‫تغییرات‬ ‫بعالوه‬ ‫‌افزار‬
‫م‬‫نر‬ ‫بازپخش‬ ‫اجازه‬ ‫کاربر‬ ‫به‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌های‬
‫ه‬‫پروان‬ ‫اغلب‬ .‫دارد‬ ‫همراه‬
( ‫باشد‬ ‫دسترس‬ ‫در‬ ‫عمومی‬ ‫بصورت‬ ‫کد‬ ‫متن‬ ‫تغییرات‬ ‫که‬ ‫زمانی‬ ‫تا‬ ‫‌دهند‬
‫ی‬‫م‬ ‫بازپخش‬ ‫برای‬
. .
www opensource org
.)
‫یک‬ ‫اینکه‬ ‫بجای‬ .‫‌دهد‬
‫ی‬‫م‬ ‫توسعه‬ ‫جامعه‬ ‫که‬ ‫است‬ ‫‌افزاری‬
‫م‬‫نر‬ ‫جمعی‬ ‫‌باز‬
‫ن‬‫مت‬ .‫دارد‬ ‫وجود‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌افزار‬
‫م‬‫نر‬ ‫نوع‬ ‫دو‬
‫از‬ ‫یک‬ ‫کدام‬ ‫که‬ ‫‌گیرند‬
‫ی‬‫م‬ ‫تصمیم‬ ‫داوطلبان‬ ‫از‬ ‫برگزیده‬ ‫گروهی‬ ‫گاهی‬ ‫باشد‬ ‫‌افزار‬
‫م‬‫نر‬ ‫مالک‬ ‫حقوقی‬ ‫شخصیت‬
‫‌دهندگان‬
‫ه‬‫توسع‬ .‫برود‬ ‫سو‬ ‫کدام‬ ‫به‬ ‫‌افزار‬
‫م‬‫نر‬ ‫و‬ ‫شوند‬ ‫پذیرفته‬ ‫اصلی‬ ‫کد‬ ‫متن‬ ‫به‬ ‫ورود‬ ‫برای‬ ‫شده‬ ‫اعمال‬ ‫همکاریهای‬
‫آپاچی‬ ‫وب‬ ‫سرور‬ ‫مورد‬ ‫مانند‬ ‫‌گیرند‬
‫ی‬‫م‬ ‫تصمیم‬ ‫‌افزار‬
‫م‬‫نر‬ ‫درباره‬ ‫بخصوص‬ ‫شرکت‬ ‫یک‬ ‫نه‬ ‫و‬ ‫کد‬ ‫کنندگان‬ ‫اعمال‬ ،‫شخصی‬
(
. .
httpd apache org
.)
‫در‬ ‫را‬ ‫تالیف‬ ‫حق‬ ‫شرکت‬ .‫است‬ ‫آن‬ ‫‌دهنده‬
‫ه‬‫توسع‬ ‫و‬ ‫مالک‬ ،‫سود‬ ‫پی‬ ‫در‬ ‫شخصیتی‬ ‫که‬ ‫است‬ ‫‌افزاری‬
‫م‬‫نر‬ ‫تجاری‬ ‫‌باز‬
‫ن‬‫مت‬
‫مانند‬ ‫دهد‬ ‫انجام‬ ‫کاری‬ ‫چه‬ ‫آینده‬ ‫در‬ ‫و‬ ‫بپذیرد‬ ‫اصلی‬ ‫کد‬ ‫متن‬ ‫به‬ ‫ورود‬ ‫برای‬ ‫را‬ ‫کد‬ ‫کدام‬ ‫که‬ ‫‌کند‬
‫ی‬‫م‬ ‫تعیین‬ ‫و‬ ‫دارد‬ ‫اختیار‬
‫مورد‬
MySQL
‫داده‬ ‫پایگاه‬ ‫و‬
( . . )
MySQL www mysql com
.
‫متمرکز‬ ‫کار‬ ‫نیروی‬ ‫اقتصاد‬ ‫بر‬ ‫اغلب‬ ‫جامعه‬ ‫بوسیله‬ ‫شده‬ ‫داده‬ ‫توسعه‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌افزار‬
‫م‬‫نر‬ ‫اقتصاد‬ ‫درباره‬ ‫پیشین‬ ‫مطالعات‬
‫اشاره‬ ‫ریموند‬ ‫اریک‬ .‫‌یابد‬
‫ی‬‫م‬ ‫تخصیص‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌افزار‬
‫م‬‫نر‬ ‫به‬ ‫‌آوری‬
‫ب‬‫تعج‬ ‫فراوان‬ ‫داوطلبانه‬ ‫کار‬ ‫میزان‬ ‫آن‬ ‫در‬ ‫که‬ ‫است‬
‫کمک‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌های‬
‫ه‬‫پروژ‬ ‫به‬ ‫همتایانشان‬ ‫بین‬ ‫اعتبار‬ ‫افزایش‬ ‫از‬ ‫ناشی‬ ‫شخصی‬ ‫لذت‬ ‫بخاطر‬ ‫‌دهندگان‬
‫ه‬‫توسع‬ ‫که‬ ‫‌کند‬
‫ی‬‫م‬
. ‫رسیدند‬ ‫مشابهی‬ ‫نتیجه‬ ‫به‬ ‫نیز‬ ‫خود‬ ‫تجربی‬ ‫مطالعه‬ ‫در‬ ‫همکارانش‬ ‫و‬ ‫هارووی‬ ‫ارنان‬ ‫‌کنند‬
‫ی‬‫م‬
‫‌انداز‬
‫م‬‫چش‬ ‫بهبود‬ ‫و‬ ‫فنی‬ ‫تواناییهای‬ ‫کردن‬ ‫مستند‬ ‫برای‬ ‫‌دهندگان‬
‫ه‬‫توسع‬ ‫که‬ ‫‌کنند‬
‫ی‬‫م‬ ‫استدالل‬ ‫تیروله‬ ‫جین‬ ،‫لرنرو‬ ‫جاشوا‬
‫لذت‬ ‫که‬ ‫‌کنند‬
‫ی‬‫م‬ ‫گزارش‬ ‫گلف‬ ‫رابرت‬ ‫الخانیو‬ ‫کریم‬ ‫و‬ ‫‌کنند‬
‫ی‬‫م‬ ‫کمک‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌های‬
‫ه‬‫پروژ‬ ‫به‬ ‫آتی‬ ‫کارفرمایان‬ ‫برای‬ ‫شغلی‬
‫نشان‬ ‫مطالعه‬ ‫این‬ ‫گرچه‬ ‫است‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌های‬
‫ه‬‫پروژ‬ ‫به‬ ‫‌دهندگان‬
‫ه‬‫توسع‬ ‫کمک‬ ‫برای‬ ‫مهمی‬ ‫ذاتی‬ ‫محرک‬ ‫کار‬ ‫از‬ ‫بردن‬
.‫‌اند‬
‫م‬‫مه‬ ‫هم‬ ‫مالی‬ ‫‌های‬
‫ه‬‫انگیز‬ ‫که‬ ‫‌دهد‬
‫ی‬‫م‬
‫را‬ ‫اشخاصی‬ ‫شرکتها‬ ‫چرا‬ ‫که‬ ‫‌دهد‬
‫ی‬‫نم‬ ‫شرح‬ ‫را‬ ‫این‬ ‫اما‬ ‫است‬ ‫داوطلبانه‬ ‫کار‬ ‫برای‬ ‫توضیحات‬ ‫از‬ ‫‌ای‬
‫ه‬‫پار‬ ‫اینها‬ ‫که‬ ‫حالی‬ ‫در‬
‫همکارانش‬ ‫و‬ ‫هان‬ ‫هورن‬ ‫ایل‬ .‫‌کنند‬
‫ی‬‫م‬ ‫کمک‬ ‫‌باز‬
‫ن‬‫مت‬ ‫‌افزار‬
‫م‬‫نر‬ ‫‌های‬
‫ه‬‫پروژ‬ ‫به‬ ‫شرکت‬ ‫کاری‬ ‫زمان‬ ‫در‬ ‫که‬ ‫‌کنند‬
‫ی‬‫م‬ ‫استخدام‬
‫در‬ ‫آنها‬ ‫رتبه‬ ‫با‬ ‫مستقیمی‬ ‫رابطه‬ ‫‌کنند‬
‫ی‬‫م‬ ‫کمک‬ ‫آپاچی‬ ‫افزار‬ ‫نرم‬ ‫بنیاد‬ ‫پروژه‬ ‫به‬ ‫که‬ ‫کسانی‬ ‫حقوق‬ ‫که‬ ‫دریافتند‬
‫معیاری‬ ‫عنوان‬ ‫به‬ ‫را‬ ‫بنیاد‬ ‫در‬ ‫‌دهندگان‬
‫ه‬‫توسع‬ ‫رتبه‬ ‫کارفرمایان‬ ‫که‬ ‫گرفتند‬ ‫نتیجه‬ ‫محققین‬ ‫پس‬ .‫دارد‬ ‫آپاچی‬ ‫تشکیالت‬
.‫‌گیرند‬
‫ی‬‫م‬ ‫بکار‬ ‫مولد‬ ‫‌های‬
‫ی‬‫توانای‬ ‫سنجش‬ ‫برای‬
‫مقدمه‬
Database DevOps
‫‌های‬
‫ه‬‫شیو‬ ‫ترکیب‬ ‫به‬
DevOps
‫و‬ ‫همکاری‬ ‫بهبود‬ ‫آن‬ ‫هدف‬ ‫و‬ ‫دارد‬ ‫اشاره‬ ‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ‫مدیریت‬ ‫با‬
‫‌طور‬
‫ه‬‫ب‬ ‫تا‬ ‫‌کند‬
‫ی‬‫م‬ ‫کمک‬ ‫‌ها‬
‫ن‬‫سازما‬ ‫به‬ ‫رویکرد‬ ‫این‬ .‫است‬ ‫داده‬ ‫پایگاه‬ ‫مدیریت‬ ‫‌های‬
‫م‬‫تی‬ ‫و‬ ‫‌افزار‬
‫م‬‫نر‬ ‫‌دهنده‬
‫ه‬‫توسع‬ ‫‌های‬
‫م‬‫تی‬ ‫بین‬ ‫هماهنگی‬
.‫کنند‬ ‫مستقر‬ ‫و‬ ‫تست‬ ،‫توسعه‬ ‫را‬ ‫‌افزارها‬
‫م‬‫نر‬ ‫مؤثرتری‬ ‫و‬ ‫‌تر‬
‫ع‬‫سری‬
‫نقش‬
API
‫در‬ ‫ها‬
Database DevOps
( )
API Application Programming Interface
‫در‬ ‫ها‬
Database DevOps
‫زیر‬ ‫در‬ .‫‌کنند‬
‫ی‬‫م‬ ‫ایفا‬ ‫مهمی‬ ‫بسیار‬ ‫نقش‬
:‫‌شود‬
‫ی‬‫م‬ ‫اشاره‬ ‫‌ها‬
‫ش‬‫نق‬ ‫این‬ ‫از‬ ‫برخی‬ ‫به‬
1
.
‫‌ها‬
‫م‬‫سیست‬ ‫بین‬ ‫ارتباط‬
:
API
‫ارتباط‬ ‫این‬ .‫‌کنند‬
‫ی‬‫م‬ ‫عمل‬ ‫‌ها‬
‫م‬‫سیست‬ ‫سایر‬ ‫و‬ ‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ‫بین‬ ‫ارتباط‬ ‫برای‬ ‫واسطی‬ ‫عنوان‬ ‫به‬ ‫ها‬
.‫باشد‬ ‫‌ها‬
‫ه‬‫داد‬ ‫روی‬ ‫بر‬ ‫مختلف‬ ‫عملیات‬ ‫انجام‬ ‫و‬ ‫خدمات‬ ‫فراخوانی‬ ،‫‌ها‬
‫ه‬‫داد‬ ‫تبادل‬ ‫شامل‬ ‫‌تواند‬
‫ی‬‫م‬
2
.
‫فرآیندها‬ ‫خودکارسازی‬
‫از‬ ‫استفاده‬ ‫با‬ :
API
‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ‫مدیریت‬ ‫و‬ ‫پیکربندی‬ ،‫استقرار‬ ‫مانند‬ ‫مختلف‬ ‫فرآیندهای‬ ‫‌توان‬
‫ی‬‫م‬ ،‫ها‬
.‫‌کند‬
‫ی‬‫م‬ ‫کمک‬ ‫استقرار‬ ‫و‬ ‫توسعه‬ ‫در‬ ‫سرعت‬ ‫افزایش‬ ‫و‬ ‫خطاها‬ ‫کاهش‬ ‫به‬ ‫خودکارسازی‬ ‫این‬ .‫کرد‬ ‫خودکار‬ ‫را‬
3
.
‫اعتبارسنجی‬ ‫و‬ ‫تست‬
:
API
‫‌های‬
‫ت‬‫تس‬ ‫ایجاد‬ ‫با‬ .‫شوند‬ ‫استفاده‬ ‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ‫عملکرد‬ ‫اعتبارسنجی‬ ‫و‬ ‫تست‬ ‫برای‬ ‫‌توانند‬
‫ی‬‫م‬ ‫ها‬
‫برای‬ ‫خودکار‬
API
‫ایجاد‬ ‫مشکلی‬ ‫هیچ‬ ‫و‬ ‫‌کنند‬
‫ی‬‫م‬ ‫عمل‬ ‫درستی‬ ‫به‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫تغییرات‬ ‫که‬ ‫کرد‬ ‫حاصل‬ ‫اطمینان‬ ‫‌توان‬
‫ی‬‫م‬ ،‫ها‬
.‫‌کنند‬
‫ی‬‫نم‬
4
.
‫تغییرات‬ ‫مدیریت‬
:
API
‫از‬ ‫استفاده‬ ‫با‬ .‫کنند‬ ‫عمل‬ ‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ‫در‬ ‫تغییرات‬ ‫مدیریت‬ ‫برای‬ ‫ابزاری‬ ‫عنوان‬ ‫به‬ ‫‌توانند‬
‫ی‬‫م‬ ‫ها‬
API
.‫کرد‬ ‫جلوگیری‬ ‫مشکالت‬ ‫بروز‬ ‫از‬ ‫و‬ ‫داد‬ ‫انجام‬ ‫مستند‬ ‫و‬ ‫‌شده‬
‫ل‬‫کنتر‬ ‫‌طور‬
‫ه‬‫ب‬ ‫را‬ ‫تغییرات‬ ‫‌توان‬
‫ی‬‫م‬ ،‫ها‬
5
.
‫تحلیل‬ ‫و‬ ‫تجزیه‬ ‫و‬ ‫نظارت‬
:
API
‫‌ها‬
‫ه‬‫داد‬ ‫این‬ .‫کنند‬ ‫کمک‬ ‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ‫عملکرد‬ ‫به‬ ‫مربوط‬ ‫‌های‬
‫ه‬‫داد‬ ‫‌آوری‬
‫ع‬‫جم‬ ‫به‬ ‫‌توانند‬
‫ی‬‫م‬ ‫ها‬
.‫شوند‬ ‫استفاده‬ ‫مشکالت‬ ‫شناسایی‬ ‫و‬ ‫عملکرد‬ ‫بر‬ ‫نظارت‬ ‫برای‬ ‫‌توانند‬
‫ی‬‫م‬
6
.
‫‌ها‬
‫س‬‫میکروسروی‬ ‫توسعه‬
،‫‌ها‬
‫س‬‫میکروسروی‬ ‫معماری‬ ‫در‬ :
API
‫داده‬ ‫پایگاه‬ ‫به‬ ‫‌تواند‬
‫ی‬‫م‬ ‫میکروسرویس‬ ‫هر‬ .‫دارند‬ ‫کلیدی‬ ‫نقش‬ ‫ها‬
‫از‬ ‫و‬ ‫شود‬ ‫متصل‬ ‫خود‬ ‫خاص‬
API
.‫کند‬ ‫استفاده‬ ‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ‫و‬ ‫‌ها‬
‫س‬‫میکروسروی‬ ‫سایر‬ ‫با‬ ‫تعامل‬ ‫برای‬ ‫ها‬
،‫مجموع‬ ‫در‬
API
‫در‬ ‫فرآیندها‬ ‫خودکارسازی‬ ‫و‬ ‫ارتباطات‬ ‫تسهیل‬ ‫به‬ ‫ها‬
Database DevOps
‫را‬ ‫امکان‬ ‫این‬ ‫‌ها‬
‫م‬‫تی‬ ‫به‬ ‫و‬ ‫‌کنند‬
‫ی‬‫م‬ ‫کمک‬
.‫دهند‬ ‫پاسخ‬ ‫تجاری‬ ‫نیازهای‬ ‫به‬ ‫مؤثرتری‬ ‫‌طور‬
‫ه‬‫ب‬ ‫که‬ ‫‌دهند‬
‫ی‬‫م‬
‫؟‬ ‫چه‬ ‫یعنی‬ ‫دواپس‬ ‫فرهنگ‬
1
.
Learn to trust
:)‫اعتماد‬ ‫(یادگیری‬
.‫است‬ ‫ضروری‬ ‫کاری‬ ‫استرس‬ ‫کاهش‬ ‫و‬ ‫بهتر‬ ‫همکاری‬ ‫برای‬ ‫تیم‬ ‫اعضای‬ ‫بین‬ ‫اعتماد‬ ‫ایجاد‬ :‫اهمیت‬
.‫بگذارند‬ ‫اشتراک‬ ‫به‬ ‫را‬ ‫مشکالت‬ ‫و‬ ،‫دانش‬ ،‫اطالعات‬ ‫‌توانند‬
‫ی‬‫م‬ ‫بهتر‬ ‫‌ها‬
‫م‬‫تی‬ ،‫باشد‬ ‫داشته‬ ‫وجود‬ ‫اعتماد‬ ‫وقتی‬ ‫است؟‬ ‫مهم‬ ‫چرا‬
‫شود؟‬ ‫عملی‬ ‫چگونه‬
.‫کنید‬ ‫استفاده‬ ‫‌ها‬
‫ی‬‫‌گیر‬
‫م‬‫تصمی‬ ‫در‬ ‫شفافیت‬ ‫از‬
.‫باشند‬ ‫داشته‬ ‫بیشتری‬ ‫‌پذیری‬
‫ت‬‫مسئولی‬ ‫دهید‬ ‫اجازه‬ ‫تیم‬ ‫اعضای‬ ‫به‬
2
.
Understand motivations
:)‫‌ها‬
‫ه‬‫انگیز‬ ‫(درک‬
.‫‌کند‬
‫ی‬‫م‬ ‫کمک‬ ‫تیمی‬ ‫تعامالت‬ ‫بهبود‬ ‫به‬ ‫افراد‬ ‫اهداف‬ ‫و‬ ‫رفتار‬ ‫پشت‬ ‫دالیل‬ ‫درک‬ :‫اهمیت‬
.‫کنیم‬ ‫همکاری‬ ‫و‬ ‫کنیم‬ ‫برقرار‬ ‫ارتباط‬ ‫‌ها‬
‫ن‬‫آ‬ ‫با‬ ‫‌توانیم‬
‫ی‬‫م‬ ‫بهتر‬ ،‫دارند‬ ‫خاصی‬ ‫رفتار‬ ‫ما‬ ‫همکاران‬ ‫چرا‬ ‫بدانیم‬ ‫اگر‬ ‫است؟‬ ‫مهم‬ ‫چرا‬
‫شود؟‬ ‫عملی‬ ‫چگونه‬
.‫کنید‬ ‫برگزار‬ ‫سازمانی‬ ‫و‬ ‫فردی‬ ‫اهداف‬ ‫‌سازی‬
‫ف‬‫شفا‬ ‫برای‬ ‫منظم‬ ‫جلسات‬
.‫کنید‬ ‫تشویق‬ ‫را‬ ‫‌ها‬
‫ن‬‫آ‬ ‫و‬ ‫دهید‬ ‫گوش‬ ‫تیم‬ ‫اعضای‬ ‫بازخورد‬ ‫به‬
3
.
Eliminate blame
:)‫‌یابی‬
‫ر‬‫مقص‬ ‫(حذف‬
.‫‌شود‬
‫ی‬‫م‬ ‫اشتباهات‬ ‫از‬ ‫یادگیری‬ ‫و‬ ‫نوآوری‬ ‫مانع‬ ‫‌یابی‬
‫ر‬‫مقص‬ ‫فرهنگ‬ :‫اهمیت‬
.‫سرزنش‬ ‫از‬ ‫ترس‬ ‫نه‬ ،‫باشند‬ ‫یادگیری‬ ‫برای‬ ‫فرصتی‬ ‫اشتباهات‬ ‫که‬ ‫کنند‬ ‫کار‬ ‫محیطی‬ ‫در‬ ‫باید‬ ‫‌ها‬
‫م‬‫تی‬ ‫است؟‬ ‫مهم‬ ‫چرا‬
‫شود؟‬ ‫عملی‬ ‫چگونه‬
‫از‬
"
Blameless Postmortem
.‫کنید‬ ‫استفاده‬ )‫‌یابی‬
‫ر‬‫مقص‬ ‫بدون‬ ‫(تحلیل‬ "
.‫مقصر‬ ‫یافتن‬ ‫نه‬ ،‫کنید‬ ‫تمرکز‬ ‫مشکل‬ ‫حل‬ ‫روی‬ ‫بر‬
4
.
Embrace smart failure
:)‫هوشمندانه‬ ‫‌های‬
‫ت‬‫شکس‬ ‫(پذیرش‬
.‫است‬ ‫نوآوری‬ ‫و‬ ‫یادگیری‬ ‫از‬ ‫طبیعی‬ ‫بخشی‬ ‫شکست‬ :‫اهمیت‬
.‫کنند‬ ‫‌تر‬
‫ی‬‫قو‬ ‫را‬ ‫تیم‬ ‫و‬ ‫شود‬ ‫گرفته‬ ‫درس‬ ‫‌ها‬
‫ن‬‫آ‬ ‫از‬ ‫که‬ ‫هستند‬ ‫اشتباهاتی‬ ‫معنی‬ ‫به‬ ‫هوشمندانه‬ ‫‌های‬
‫ت‬‫شکس‬ ‫است؟‬ ‫مهم‬ ‫چرا‬
‫شود؟‬ ‫عملی‬ ‫چگونه‬
.‫دهید‬ ‫ترویج‬ ‫تیم‬ ‫در‬ ‫را‬ ‫مداوم‬ ‫یادگیری‬ ‫فرهنگ‬
.‫کنید‬ ‫تبدیل‬ ‫فرآیند‬ ‫از‬ ‫بخشی‬ ‫به‬ ‫را‬ ‫‌شده‬
‫ه‬‫آموخت‬ ‫‌های‬
‫س‬‫در‬ ‫مستندسازی‬
5
.
Focus on bottlenecks and flow
:)‫کار‬ ‫جریان‬ ‫و‬ ‫‌ها‬
‫ه‬‫گلوگا‬ ‫بر‬ ‫(تمرکز‬
.‫است‬ ‫ضروری‬ ‫تیم‬ ‫‌وری‬
‫ه‬‫بهر‬ ‫افزایش‬ ‫برای‬ ‫کار‬ ‫جریان‬ ‫در‬ ‫موانع‬ ‫حل‬ ‫و‬ ‫شناسایی‬ :‫اهمیت‬
.‫‌شوند‬
‫ی‬‫م‬ ‫مشتریان‬ ‫به‬ ‫ارزش‬ ‫تحویل‬ ‫شدن‬ ‫کند‬ ‫باعث‬ ‫‌ها‬
‫ه‬‫گلوگا‬ ‫است؟‬ ‫مهم‬ ‫چرا‬
‫شود؟‬ ‫عملی‬ ‫چگونه‬
‫مانند‬ ‫ابزارهایی‬ ‫از‬
Value Stream Mapping
.‫کنید‬ ‫استفاده‬ ‫‌ها‬
‫ه‬‫گلوگا‬ ‫شناسایی‬ ‫برای‬
.‫دهید‬ ‫بهبود‬ ‫مرتبًا‬ ‫را‬ ‫فرآیندها‬
6
.
Eliminate unplanned work
:)‫‌نشده‬
‫ی‬‫‌ریز‬
‫ه‬‫برنام‬ ‫کارهای‬ ‫(حذف‬
.‫‌شوند‬
‫ی‬‫م‬ ‫تیم‬ ‫استرس‬ ‫افزایش‬ ‫و‬ ‫کار‬ ‫جریان‬ ‫در‬ ‫اختالل‬ ‫باعث‬ ‫اغلب‬ ‫‌نشده‬
‫ی‬‫‌ریز‬
‫ه‬‫برنام‬ ‫کارهای‬ :‫اهمیت‬
.‫‌شوند‬
‫ی‬‫م‬ ‫مهم‬ ‫و‬ ‫اصلی‬ ‫وظایف‬ ‫بر‬ ‫تمرکز‬ ‫کاهش‬ ‫باعث‬ ‫کارها‬ ‫نوع‬ ‫این‬ ‫است؟‬ ‫مهم‬ ‫چرا‬
‫شود؟‬ ‫عملی‬ ‫چگونه‬
.‫کنید‬ ‫خودکار‬ ‫را‬ ‫فرآیندها‬
.‫باشید‬ ‫پایبند‬ ‫آن‬ ‫به‬ ‫و‬ ‫کنید‬ ‫تهیه‬ ‫وظایف‬ ‫از‬ ‫شده‬ ‫‌بندی‬
‫ت‬‫اولوی‬ ‫لیست‬ ‫یک‬
7
.
Be continuous
:)‫باشید‬ ‫(پیوسته‬
‫کلیدی‬ ‫اصول‬ ‫از‬ ‫یکی‬ ‫مستمر‬ ‫بهبود‬ ‫و‬ ‫مستمر‬ ‫تحویل‬ :‫اهمیت‬
DevOps
.‫است‬
.‫است‬ ‫تغییرات‬ ‫به‬ ‫‌گویی‬
‫خ‬‫پاس‬ ‫و‬ ‫باال‬ ‫کیفیت‬ ‫حفظ‬ ‫معنی‬ ‫به‬ ‫پایدار‬ ‫و‬ ‫مستمر‬ ‫کار‬ ‫است؟‬ ‫مهم‬ ‫چرا‬
‫شود؟‬ ‫عملی‬ ‫چگونه‬
Connect Engine
MariaDB CONNECT Engine
‫در‬ ‫‌سازی‬
‫ه‬‫ذخیر‬ ‫موتور‬ ‫یک‬
MariaDB
‫داده‬ ‫منابع‬ ‫به‬ ‫تا‬ ‫‌دهد‬
‫ی‬‫م‬ ‫را‬ ‫امکان‬ ‫این‬ ‫شما‬ ‫به‬ ‫که‬ ‫است‬
‫و‬ ‫دیگر‬ ‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ،‫‌ها‬
‫ل‬‫فای‬ ‫جمله‬ ‫از‬ ،‫مختلف‬
API
‫های‬
REST
‫ادغام‬ ‫برای‬ ‫‌ویژه‬
‫ه‬‫ب‬ ‫موتور‬ ‫این‬ .‫کنید‬ ‫پیدا‬ ‫دسترسی‬ ‫یکپارچه‬ ‫‌صورت‬
‫ه‬‫ب‬ ،
.‫است‬ ‫مفید‬ ‫‌ها‬
‫ه‬‫داد‬ ‫از‬ ‫واحد‬ ‫نمای‬ ‫یک‬ ‫ایجاد‬ ‫و‬ ‫مختلف‬ ‫منابع‬ ‫از‬ ‫‌ها‬
‫ه‬‫داد‬
‫کاربردهای‬ ‫و‬ ‫‌ها‬
‫ی‬‫ویژگ‬
MariaDB CONNECT Engine
1
.
‫متنوع‬ ‫داده‬ ‫منابع‬ ‫به‬ ‫دسترسی‬
:
•
CONNECT Engine
‫‌های‬
‫ل‬‫فای‬ ‫مانند‬ ‫‌ای‬
‫ه‬‫داد‬ ‫منابع‬ ‫به‬ ‫که‬ ‫‌دهد‬
‫ی‬‫م‬ ‫را‬ ‫امکان‬ ‫این‬ ‫شما‬ ‫به‬
CSV، JSON، XML
‫و‬ ،
‫(مانند‬ ‫دیگر‬ ‫داده‬ ‫‌های‬
‫ه‬‫پایگا‬ ‫همچنین‬
MySQL، PostgreSQL
.‫کنید‬ ‫پیدا‬ ‫دسترسی‬ )‫غیره‬ ‫و‬
2
.
‫‌های‬
‫ه‬‫دستگا‬
REST API
:
•
‫از‬ ‫استفاده‬ ‫با‬
CONNECT Engine
‫به‬ ‫‌توانید‬
‫ی‬‫م‬ ،
API
‫های‬
REST
‫‌صورت‬
‫ه‬‫ب‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫و‬ ‫کنید‬ ‫پیدا‬ ‫دسترسی‬
‫این‬ ‫از‬ ‫مستقیم‬
API
‫پایگاه‬ ‫در‬ ‫‌راحتی‬
‫ه‬‫ب‬ ‫را‬ ‫خارجی‬ ‫‌های‬
‫ه‬‫داد‬ ‫که‬ ‫‌دهد‬
‫ی‬‫م‬ ‫را‬ ‫امکان‬ ‫این‬ ‫شما‬ ‫به‬ ‫ویژگی‬ ‫این‬ .‫آورید‬ ‫‌دست‬
‫ه‬‫ب‬ ‫ها‬
.‫کنید‬ ‫ادغام‬ ‫خود‬ ‫داده‬
3
.
‫داده‬ ‫مختلف‬ ‫‌های‬
‫ت‬‫فرم‬ ‫از‬ ‫پشتیبانی‬
:
•
CONNECT Engine
‫مانند‬ ‫داده‬ ‫مختلف‬ ‫‌های‬
‫ت‬‫فرم‬ ‫از‬
JSON، CSV
‫و‬ ،
XML
‫شما‬ ‫به‬ ‫این‬ .‫‌کند‬
‫ی‬‫م‬ ‫پشتیبانی‬
.‫کنید‬ ‫بارگذاری‬ ‫مختلف‬ ‫منابع‬ ‫از‬ ‫‌راحتی‬
‫ه‬‫ب‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫که‬ ‫‌دهد‬
‫ی‬‫م‬ ‫را‬ ‫امکان‬ ‫این‬
4
.
‫مجازی‬ ‫جداول‬ ‫ایجاد‬
:
•
‫در‬ ‫عادی‬ ‫‌صورت‬
‫ه‬‫ب‬ ‫جداول‬ ‫این‬ .‫‌کنند‬
‫ی‬‫م‬ ‫اشاره‬ ‫خارجی‬ ‫داده‬ ‫منابع‬ ‫به‬ ‫که‬ ‫کنید‬ ‫ایجاد‬ ‫مجازی‬ ‫جداول‬ ‫‌توانید‬
‫ی‬‫م‬ ‫شما‬
SQL
.‫کنید‬ ‫استفاده‬ ‫خود‬ ‫‌های‬
‫ی‬‫کوئر‬ ‫در‬ ‫‌ها‬
‫ن‬‫آ‬ ‫از‬ ‫‌توانید‬
‫ی‬‫م‬ ‫و‬ ‫هستند‬ ‫‌وجو‬
‫س‬‫پر‬ ‫قابل‬
5
.
‫‌ها‬
‫ه‬‫داد‬ ‫ادغام‬
:
•
‫از‬ ‫استفاده‬ ‫با‬
CONNECT Engine
‫یک‬ ‫در‬ ‫یکپارچه‬ ‫‌صورت‬
‫ه‬‫ب‬ ‫و‬ ‫کنید‬ ‫ادغام‬ ‫مختلف‬ ‫منابع‬ ‫از‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ ،
.‫است‬ ‫مفید‬ ‫‌گیری‬
‫ش‬‫گزار‬ ‫و‬ ‫‌ها‬
‫ه‬‫داد‬ ‫تحلیل‬ ‫برای‬ ‫‌ویژه‬
‫ه‬‫ب‬ ‫ویژگی‬ ‫این‬ .‫کنید‬ ‫کار‬ ‫داده‬ ‫پایگاه‬
6
.
‫هویت‬ ‫احراز‬ ‫از‬ ‫پشتیبانی‬
:
•
،‫دارند‬ ‫هویت‬ ‫احراز‬ ‫به‬ ‫نیاز‬ ‫دارید‬ ‫دسترسی‬ ‫‌ها‬
‫ن‬‫آ‬ ‫به‬ ‫که‬ ‫‌ای‬
‫ه‬‫داد‬ ‫منابع‬ ‫اگر‬
CONNECT Engine
‫شما‬ ‫به‬ ‫را‬ ‫امکان‬ ‫این‬
.‫کنید‬ ‫وارد‬ ‫جدول‬ ‫تعریف‬ ‫در‬ ‫را‬ ‫هویت‬ ‫احراز‬ ‫اطالعات‬ ‫که‬ ‫‌دهد‬
‫ی‬‫م‬
‫کاربردها‬ ‫از‬ ‫‌هایی‬
‫ل‬‫مثا‬
•
‫خارجی‬ ‫‌های‬
‫ه‬‫داد‬ ‫تحلیل‬
‫از‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ :
API
‫و‬ ‫تحلیل‬ ‫برای‬ ‫داده‬ ‫پایگاه‬ ‫یک‬ ‫در‬ ‫را‬ ‫‌ها‬
‫ن‬‫آ‬ ‫و‬ ‫کرده‬ ‫‌آوری‬
‫ع‬‫جم‬ ‫مختلف‬ ‫های‬
.‫کنید‬ ‫ذخیره‬ ‫‌گیری‬
‫ش‬‫گزار‬
•
‫منبع‬ ‫چندین‬ ‫از‬ ‫‌ها‬
‫ه‬‫داد‬ ‫ادغام‬
‫از‬ ‫‌توانید‬
‫ی‬‫م‬ ،‫دارند‬ ‫قرار‬ ‫مختلف‬ ‫فرمت‬ ‫یا‬ ‫داده‬ ‫پایگاه‬ ‫چندین‬ ‫در‬ ‫شما‬ ‫‌های‬
‫ه‬‫داد‬ ‫اگر‬ :
CONNECT
Engine
.‫کنید‬ ‫استفاده‬ ‫‌ها‬
‫ن‬‫آ‬ ‫ادغام‬ ‫برای‬
•
‫تاریخی‬ ‫‌های‬
‫ه‬‫داد‬ ‫به‬ ‫دسترسی‬
‫‌های‬
‫ل‬‫فای‬ ‫از‬ ‫را‬ ‫تاریخی‬ ‫‌های‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ :
CSV
‫یا‬
JSON
‫پایگاه‬ ‫در‬ ‫را‬ ‫‌ها‬
‫ن‬‫آ‬ ‫و‬ ‫کرده‬ ‫بارگذاری‬
.‫کنید‬ ‫ذخیره‬ ‫خود‬ ‫داده‬
‫‌سازی‬
‫ه‬‫پیاد‬ ‫از‬ ‫مثال‬ ‫چند‬ ‫اینجا‬ ‫در‬
MariaDB CONNECT Engine
:‫است‬ ‫شده‬ ‫آورده‬ ‫مختلف‬ ‫داده‬ ‫منابع‬ ‫به‬ ‫دسترسی‬ ‫برای‬
‫مثال‬
1
‫فایل‬ ‫یک‬ ‫به‬ ‫دسترسی‬ :
CSV
‫فایل‬ ‫یک‬ ‫شما‬ ‫کنید‬ ‫فرض‬
CSV
‫نام‬ ‫به‬
.
data csv
:‫است‬ ‫زیر‬ ‫اطالعات‬ ‫شامل‬ ‫که‬ ‫دارید‬
id,name,value
1,Item1,100
2,Item2,200
3,Item3,300
‫فایل‬ ‫این‬ ‫به‬ ‫دسترسی‬ ‫برای‬
CSV
:‫کنید‬ ‫ایجاد‬ ‫را‬ ‫زیر‬ ‫جدول‬ ‫‌توانید‬
‫ی‬‫م‬ ،
CREATE TABLE csv_data (
id INT,
name VARCHAR(255),
value INT
) ENGINE=CONNECT
TABLE_TYPE=CSV
URI='/path/to/data.csv';
:‫کنید‬ ‫انتخاب‬ ‫ساده‬ ‫کوئری‬ ‫یک‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ ‫سپس‬
SELECT * FROM csv_data;
‫مثال‬
2
‫یک‬ ‫به‬ ‫دسترسی‬ :
API REST
‫یک‬ ‫شما‬ ‫کنید‬ ‫فرض‬
API REST
‫‌صورت‬
‫ه‬‫ب‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫که‬ ‫دارید‬
JSON
،‫مثال‬ ‫برای‬ .‫‌دهد‬
‫ی‬‫م‬ ‫ارائه‬
API
‫آدرس‬ ‫به‬ ‫شما‬
:// . . /
http api example com data
‫این‬ ‫به‬ ‫دسترسی‬ ‫برای‬ .‫‌دهد‬
‫ی‬‫م‬ ‫پاسخ‬
API
:‫کنید‬ ‫ایجاد‬ ‫را‬ ‫زیر‬ ‫جدول‬ ‫‌توانید‬
‫ی‬‫م‬ ،
CREATE TABLE api_data (
id INT,
name VARCHAR(255),
value INT
) ENGINE=CONNECT
TABLE_TYPE=REST
URI='http://api.example.com/data'
FORMAT='JSON';
:‫کنید‬ ‫انتخاب‬ ‫زیر‬ ‫کوئری‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ ‫سپس‬
SELECT * FROM api_data;
‫مثال‬
3
‫یک‬ ‫به‬ ‫داده‬ ‫ارسال‬ :
API
‫از‬ ‫استفاده‬ ‫با‬
POST
‫یک‬ ‫به‬ ‫را‬ ‫‌ای‬
‫ه‬‫داد‬ ‫بخواهید‬ ‫اگر‬
API
‫روش‬ ‫از‬ ‫‌توانید‬
‫ی‬‫م‬ ،‫کنید‬ ‫ارسال‬
POST
‫کنید‬ ‫فرض‬ .‫کنید‬ ‫استفاده‬
API
‫آدرس‬ ‫به‬ ‫شما‬
:// . . /
http api example com data
:‫کنید‬ ‫ایجاد‬ ‫را‬ ‫زیر‬ ‫جدول‬ ‫‌توانید‬
‫ی‬‫م‬ .‫کنید‬ ‫ارسال‬ ‫آن‬ ‫به‬ ‫را‬ ‫‌ای‬
‫ه‬‫داد‬ ‫‌خواهید‬
‫ی‬‫م‬ ‫شما‬ ‫و‬ ‫‌دهد‬
‫ی‬‫م‬ ‫پاسخ‬
CREATE TABLE api_post (
response VARCHAR(255)
) ENGINE=CONNECT
TABLE_TYPE=REST
URI='http://api.example.com/data'
FORMAT='JSON'
HTTP_METHOD='POST'
HTTP_BODY='{"key1":"value1", "key2":"value2"}';
:‫کنید‬ ‫ارسال‬ ‫زیر‬ ‫کوئری‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ ‫سپس‬
INSERT INTO api_post VALUES (NULL);
‫مثال‬
4
‫داده‬ ‫پایگاه‬ ‫یک‬ ‫به‬ ‫دسترسی‬ :
MySQL
‫دیگر‬
‫داده‬ ‫پایگاه‬ ‫یک‬ ‫به‬ ‫بخواهید‬ ‫اگر‬
MySQL
‫از‬ ‫‌توانید‬
‫ی‬‫م‬ ،‫کنید‬ ‫پیدا‬ ‫دسترسی‬ ‫دیگر‬
CONNECT Engine
‫کنید‬ ‫فرض‬ .‫کنید‬ ‫استفاده‬
‫داده‬ ‫پایگاه‬ ‫یک‬ ‫شما‬
MySQL
‫نام‬ ‫به‬
remote_db
‫جدول‬ ‫به‬ ‫‌خواهید‬
‫ی‬‫م‬ ‫و‬ ‫دارید‬
users
‫زیر‬ ‫جدول‬ ‫‌توانید‬
‫ی‬‫م‬ .‫کنید‬ ‫پیدا‬ ‫دسترسی‬ ‫آن‬
:‫کنید‬ ‫ایجاد‬ ‫را‬
CREATE TABLE remote_users (
id INT,
username VARCHAR(255),
email VARCHAR(255)
) ENGINE=CONNECT
TABLE_TYPE=MYSQL
URI='mysql://username:password@remote_host:3306/remote_db/users';
:‫کنید‬ ‫انتخاب‬ ‫زیر‬ ‫کوئری‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ ‫سپس‬
SELECT * FROM remote_users;
‫مثال‬ ‫چند‬
CONNECT Engine
‫این‬ ‫اگرچه‬ .‫بخوانید‬ ‫وب‬ ‫منابع‬ ‫حتی‬ ‫و‬ ،‫خارجی‬ ‫جداول‬ ،‫‌ها‬
‫ل‬‫فای‬ ‫از‬ ‫مستقیمًا‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫‌دهد‬
‫ی‬‫م‬ ‫اجازه‬ ‫شما‬ ‫به‬
.‫باشد‬ ‫مفید‬ ‫‌تواند‬
‫ی‬‫م‬ ‫ساده‬ ‫سناریوهای‬ ‫برای‬ ،‫دارد‬ ‫‌هایی‬
‫ت‬‫محدودی‬ ‫رویکرد‬
‫از‬ ‫چگونه‬
CONNECT Engine
‫برای‬
API
‫کنیم؟‬ ‫استفاده‬
،‫روش‬ ‫این‬ ‫در‬
CONNECT Engine
‫‌های‬
‫ه‬‫داد‬
API
‫‌های‬
‫ی‬‫کوئر‬ ‫طریق‬ ‫از‬ ‫را‬
SQL
‫‌های‬
‫ن‬‫زبا‬ ‫از‬ ‫استفاده‬ ‫به‬ ‫نیازی‬ ‫و‬ ‫‌کند‬
‫ی‬‫م‬ ‫فراخوانی‬
‫مانند‬ ‫‌نویسی‬
‫ه‬‫برنام‬
PHP
‫یا‬
Python
.‫نیست‬
‫ساخت‬ :‫مثال‬
API
‫با‬ ‫ساده‬
CONNECT Engine
‫فایل‬ ‫یک‬ ‫طریق‬ ‫از‬ ‫را‬ ‫جدول‬ ‫یک‬ ‫‌های‬
‫ه‬‫داد‬ ‫‌خواهیم‬
‫ی‬‫م‬ ‫کنید‬ ‫فرض‬
JSON
‫در‬
/
MariaDB MySQL
.‫کنیم‬ ‫منتشر‬
:‫مراحل‬
1
.
.‫اصلی‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬
2
.
‫از‬ ‫استفاده‬
CONNECT Engine
‫به‬ ‫‌ها‬
‫ه‬‫داد‬ ‫نوشتن‬ ‫برای‬
JSON
.
3
.
‫فایل‬ ‫ارائه‬ ‫برای‬ ‫سرور‬ ‫پیکربندی‬
JSON
‫‌عنوان‬
‫ه‬‫ب‬
API
.
1
‫اصلی‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ .
:‫کنید‬ ‫ایجاد‬ ‫نمونه‬ ‫دیتابیس‬ ‫و‬ ‫جدول‬ ‫یک‬ ‫ابتدا‬
CREATE DATABASE api_example;
USE api_example;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com');
2
‫پیکربندی‬ .
CONNECT Engine
‫خروجی‬ ‫برای‬
JSON
CONNECT Engine
‫‌های‬
‫ل‬‫فای‬ ‫از‬
JSON
‫به‬ ‫را‬ ‫جدول‬ ‫یک‬ ‫‌های‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ ‫شما‬ .‫‌کند‬
‫ی‬‫م‬ ‫پشتیبانی‬
JSON
‫آن‬ ‫به‬ ‫و‬ ‫کرده‬ ‫منتقل‬
.‫باشید‬ ‫داشته‬ ‫دسترسی‬
‫تنظیم‬
CONNECT Engine
:
‫که‬ ‫شوید‬ ‫مطمئن‬ ‫ابتدا‬
CONNECT Engine
:‫است‬ ‫فعال‬
SHOW ENGINES;
‫اگر‬
CONNECT
‫تنظیمات‬ ‫فایل‬ ‫در‬ ‫را‬ ‫آن‬ ،‫نیست‬ ‫فعال‬
/
MySQL MariaDB
:‫کنید‬ ‫فعال‬
[ ]
mysqld
- - = .
plugin load add ha_connect so
‫سپس‬ ‫و‬
MySQL
.‫کنید‬ ‫ریستارت‬ ‫را‬
‫فایل‬ ‫یک‬ ‫ایجاد‬
JSON
‫با‬
CONNECT
:
‫جدول‬ ‫یک‬ ‫‌توانید‬
‫ی‬‫م‬
CONNECT
‫فایل‬ ‫به‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫که‬ ‫بسازید‬
JSON
:‫کند‬ ‫متصل‬
CREATE TABLE users_json
ENGINE=CONNECT
TABLE_TYPE=JSON
FILE_NAME='/var/lib/mysql-files/users.json';
INSERT INTO users_json SELECT * FROM users;
3
‫ارائه‬ .
JSON
‫‌عنوان‬
‫ه‬‫ب‬
API
‫فایل‬ ‫به‬ ‫دسترسی‬ ‫برای‬
JSON
‫طریق‬ ‫از‬
HTTP
‫مثل‬ ‫وب‬ ‫سرور‬ ‫یک‬ ‫از‬ ‫‌توانید‬
‫ی‬‫م‬ ،
Apache
‫یا‬
Nginx
.‫کنید‬ ‫استفاده‬
‫پیکربندی‬
Apache
:
1
.
‫فایل‬
JSON
( ‫شده‬ ‫تولید‬
/
/ / - / .
var lib mysql files users json
:‫کنید‬ ‫منتقل‬ ‫وب‬ ‫عمومی‬ ‫دایرکتوری‬ ‫به‬ ‫را‬ )
/ / / - / . / / / /
mv var lib mysql files users json var www html
2
.
‫که‬ ‫شوید‬ ‫مطمئن‬
Apache
:‫است‬ ‫فعال‬ ‫و‬ ‫نصب‬
systemctl start apache2
3
.
‫فایل‬ ‫اکنون‬
JSON
‫مثل‬ ‫ابزارهایی‬ ‫یا‬ ‫مرورگر‬ ‫طریق‬ ‫از‬
curl
:‫است‬ ‫دسترسی‬ ‫قابل‬
:// / .
curl http localhost users json
‫از‬ ‫خواندن‬
API
‫خارجی‬ ‫‌های‬
‫‌توانید‬
‫ی‬‫م‬ :
CONNECT Engine
‫از‬ ‫‌ها‬
‫ه‬‫داد‬ ‫خواندن‬ ‫برای‬ ‫را‬
API
:‫کنید‬ ‫استفاده‬ ‫خارجی‬ ‫های‬
CREATE TABLE external_data
=
ENGINE CONNECT
=
TABLE_TYPE JSON
= :// . . / .
FILE_NAME 'https api example com data json';
1
.
‫جدول‬ ‫از‬ ‫مستقیم‬ ‫خواندن‬
‫کوئری‬ ‫با‬ ‫مستقیمًا‬ ‫را‬ ‫‌ها‬
‫ه‬‫داد‬ ‫‌توانید‬
‫ی‬‫م‬ ،‫فایل‬ ‫به‬ ‫داده‬ ‫نوشتن‬ ‫جای‬ ‫به‬ :
SQL
‫اصلی‬ ‫جدول‬ ‫روی‬
‫‌عنوان‬
‫ه‬‫ب‬ ‫آن‬ ‫ارائه‬ ‫برای‬ ‫ساده‬ ‫وب‬ ‫سرور‬ ‫یک‬ ‫و‬ ‫بخوانید‬
API
.‫کنید‬ ‫‌اندازی‬
‫ه‬‫را‬
:‫‌ها‬
‫ت‬‫محدودی‬
1
.
( ‫پیچیده‬ ‫‌های‬
‫ت‬‫درخواس‬ ‫مدیریت‬ ‫و‬ ‫است‬ ‫مناسب‬ ‫ساده‬ ‫سناریوهای‬ ‫برای‬ ‫بیشتر‬ ‫روش‬ ‫این‬
POST، PUT، DELETE
‫را‬ )
.‫‌کند‬
‫ی‬‫نم‬ ‫پشتیبانی‬
2
.
.‫شوند‬ ‫‌سازی‬
‫ه‬‫پیاد‬ ‫جداگانه‬ ‫صورت‬ ‫به‬ ‫باید‬ ‫هویت‬ ‫احراز‬ ‫و‬ ‫امنیت‬
3
.
‫(مثل‬ ‫سرور‬ ‫سمت‬ ‫‌نویسی‬
‫ه‬‫برنام‬ ‫زبان‬ ‫یک‬ ‫از‬ ‫استفاده‬ ،‫پیچیده‬ ‫و‬ ‫پویا‬ ‫‌های‬
‫ه‬‫داد‬ ‫برای‬
PHP
‫یا‬
Python
.‫است‬ ‫‌تر‬
‫ب‬‫مناس‬ )
‫مثال‬
۲
:
‫یک‬ ‫ایجاد‬ ‫برای‬
API
‫ابزار‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫آن‬ ‫به‬ ‫دسترسی‬ ‫و‬ ‫دیتابیس‬ ‫با‬
curl
‫مثل‬ ‫‌هایی‬
‫ک‬‫‌ور‬
‫م‬‫فری‬ ‫از‬ ‫‌توانید‬
‫ی‬‫م‬ ،
Flask
‫(برای‬
Python
‫یا‬ )
.
Express js
‫(برای‬
.
Node js
‫از‬ ‫مثال‬ ‫این‬ ‫در‬ .‫کنید‬ ‫استفاده‬ )
Python
‫و‬
Flask
‫موتور‬ ‫از‬ ‫و‬ ‫‌کنیم‬
‫ی‬‫م‬ ‫استفاده‬
/
MySQL MariaDB CONNECT
.‫‌بریم‬
‫ی‬‫م‬ ‫بهره‬ ‫دیتابیس‬ ‫به‬ ‫اتصال‬ ‫برای‬
:‫کلی‬ ‫مراحل‬
1
.
.‫محیط‬ ‫تنظیم‬ ‫و‬ ‫ابزارها‬ ‫نصب‬
2
.
.‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬
3
.
‫ساخت‬
API
‫با‬
Flask
.
4
.
‫تست‬
API
‫با‬
curl
.
1
‫محیط‬ ‫تنظیم‬ ‫و‬ ‫ابزارها‬ ‫نصب‬ .
‫‌ها‬
‫ی‬‫نیازمند‬
:
•
3
Python
•
(
Flask - -
pip install flask flask mysql connector)
•
/
MySQL MariaDB
‫سیستم‬ ‫روی‬ ‫‌شده‬
‫ب‬‫نص‬
2
‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ .
.‫کنید‬ ‫ایجاد‬ ‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ابتدا‬
:‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ساخت‬
CREATE DATABASE api_example;
USE api_example;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
:‫نمونه‬ ‫‌های‬
‫ه‬‫داد‬ ‫کردن‬ ‫اضافه‬
( , )
INSERT INTO users name email VALUES
( , . ),
'Alice' 'alice@example com'
( , . )
'Bob' 'bob@example com' ;
3
‫ایجاد‬ .
API
‫با‬
Flask
‫یک‬ ‫اینجا‬
API
‫عملیات‬ ‫که‬ ‫‌سازیم‬
‫ی‬‫م‬ ‫ساده‬
CRUD
.‫دهد‬ ‫انجام‬ ‫دیتابیس‬ ‫روی‬ ‫را‬ )‫حذف‬ ‫و‬ ‫‌روزرسانی‬
‫ه‬‫ب‬ ،‫خواندن‬ ،‫(ایجاد‬
‫کد‬
Python
:
from flask import Flask, request, jsonify
import mysql.connector
app = Flask(__name__)
# ‫دیتابیس‬ ‫تنظیمات‬
db_config = {
'host': 'localhost',
'user': 'root',
'password': 'your_password',
'database': 'api_example'
}
# :
‫کاربران‬ ‫لیست‬ ‫دریافت‬ ‫مسیر‬
@app.route('/users', methods=['GET'])
def get_users():
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM users")
users = cursor.fetchall()
conn.close()
return jsonify(users)
# :
‫جدید‬ ‫کاربر‬ ‫کردن‬ ‫اضافه‬ ‫مسیر‬
@app.route('/users', methods=['POST'])
def add_user():
data = request.json
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", (data['name'], data['email']))
conn.commit()
conn.close()
return jsonify({'message': 'User added successfully'}), 201
# :
‫خاص‬ ‫کاربر‬ ‫یک‬ ‫اطالعات‬ ‫دریافت‬ ‫مسیر‬
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
user = cursor.fetchone()
conn.close()
if user:
return jsonify(user)
else:
return jsonify({'error': 'User not found'}), 404
# :
‫کاربر‬ ‫یک‬ ‫حذف‬ ‫مسیر‬
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE id = %s", (user_id,))
conn.commit()
conn.close()
return jsonify({'message': 'User deleted successfully'})
if __name__ == '__main__':
app.run(debug=True)
4
‫تست‬ .
API
‫با‬
curl
1
:‫کاربران‬ ‫لیست‬ ‫دریافت‬ .
curl -X GET http://localhost:5000/users
2
:‫جدید‬ ‫کاربر‬ ‫کردن‬ ‫اضافه‬ .
curl -X POST http://localhost:5000/users 
-H "Content-Type: application/json" 
-d '{"name": "Charlie", "email": "charlie@example.com"}'
3
:‫خاص‬ ‫کاربر‬ ‫یک‬ ‫اطالعات‬ ‫دریافت‬ .
curl -X GET http://localhost:5000/users/1
4
:‫کاربر‬ ‫حذف‬ .
curl -X DELETE http://localhost:5000/users/1
:‫توضیحات‬
•
Flask
‫ساخت‬ ‫برای‬ ‫سبک‬ ‫‌ورک‬
‫م‬‫فری‬ :
API
.
•
.
mysql connector
.‫دیتابیس‬ ‫با‬ ‫ارتباط‬ ‫برای‬ :
•
CONNECT Engine
‫از‬ ‫استفاده‬ :
/
MySQL MariaDB
.‫مستقیم‬ ‫اتصال‬ ‫برای‬
‫از‬ ‫‌توانید‬
‫ی‬‫م‬ ‫بزرگتر‬ ‫‌های‬
‫ه‬‫پروژ‬ ‫برای‬ .‫بود‬ ‫ساده‬ ‫مثال‬ ‫یک‬ ‫این‬
ORM
‫مثل‬ ‫هایی‬
SQLAlchemy
.‫کنید‬ ‫استفاده‬
‫مثال‬
۳
:
‫ایجاد‬ ‫برای‬
API
‫با‬
PHP
‫دیتابیس‬ ‫و‬
MySQL
‫از‬ ‫‌توان‬
‫ی‬‫م‬ ،
PHP
‫مثل‬ ‫‌هایی‬
‫ک‬‫‌ور‬
‫م‬‫فری‬ ‫یا‬ ‫خام‬
Laravel
‫از‬ ‫اینجا‬ ‫در‬ .‫کرد‬ ‫استفاده‬
PHP
‫یک‬ ‫ایجاد‬ ‫برای‬ ‫خام‬
API
‫عملیات‬ ‫که‬ ‫‌کنیم‬
‫ی‬‫م‬ ‫استفاده‬ ‫ساده‬
CRUD
‫با‬ ‫و‬ ‫‌دهد‬
‫ی‬‫م‬ ‫انجام‬ ‫را‬ )‫حذف‬ ‫و‬ ‫‌روزرسانی‬
‫ه‬‫ب‬ ،‫خواندن‬ ،‫(ایجاد‬
curl
.‫است‬ ‫دسترسی‬ ‫قابل‬
:‫کلی‬ ‫مراحل‬
1
.
‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬
.
2
.
‫فایل‬ ‫ایجاد‬
API
‫با‬
PHP
.
3
.
‫تست‬
API
‫با‬
curl
.
1
‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ .
SQL
:‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ساخت‬ ‫برای‬
CREATE DATABASE api_example;
USE api_example;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com');
2
‫فایل‬ ‫ایجاد‬ .
API
‫با‬
PHP
:‫فایل‬
.
api php
<?php
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Methods, Authorization");
$servername = "localhost";
$username = "root";
$password = "your_password";
$dbname = "api_example";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die(json_encode(["error" => "Database connection failed: " . $conn->connect_error]));
}
// Method detection
$method = $_SERVER['REQUEST_METHOD'];
$path = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$resource = $path[0] ?? null;
$id = $path[1] ?? null;
// Routes
if ($resource === 'users') {
switch ($method) {
case 'GET':
if ($id) {
// Get a specific user
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
echo json_encode($user ?: ["error" => "User not found"]);
} else {
// Get all users
$result = $conn->query("SELECT * FROM users");
$users = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($users);
}
break;
case 'POST':
// Create a new user
$data = json_decode(file_get_contents("php://input"), true);
if (isset($data['name'], $data['email'])) {
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $data['name'], $data['email']);
$stmt->execute();
echo json_encode(["message" => "User created successfully", "id" => $conn->insert_id]);
} else {
echo json_encode(["error" => "Invalid input"]);
}
break;
case 'DELETE':
// Delete a user
if ($id) {
$stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
echo json_encode(["message" => "User deleted successfully"]);
} else {
echo json_encode(["error" => "User ID not provided"]);
}
break;
default:
echo json_encode(["error" => "Unsupported HTTP method"]);
break;
}
} else {
echo json_encode(["error" => "Invalid endpoint"]);
}
$conn->close();
?>
3
‫تست‬ .
API
‫با‬
curl
1
:‫کاربران‬ ‫همه‬ ‫دریافت‬ .
curl -X GET http://localhost/api.php/users
2
:‫خاص‬ ‫کاربر‬ ‫یک‬ ‫دریافت‬ .
curl -X GET http://localhost/api.php/users/1
3
:‫جدید‬ ‫کاربر‬ ‫کردن‬ ‫اضافه‬ .
curl -X POST http://localhost/api.php/users 
-H "Content-Type: application/json"
-d '{"name": "Charlie", "email": "charlie@example.com"}'
4
:‫کاربر‬ ‫حذف‬ .
curl -X DELETE http://localhost/api.php/users/1
:‫توضیحات‬
1
.
‫دیتابیس‬ ‫اتصال‬
‫از‬ :
mysqli
‫با‬ ‫ارتباط‬ ‫برای‬
MySQL
.‫است‬ ‫شده‬ ‫استفاده‬
2
.
‫‌ها‬
‫ه‬‫داد‬ ‫دریافت‬
‫از‬ :
://
php input
‫ورودی‬ ‫دریافت‬ ‫برای‬
JSON
.‫است‬ ‫شده‬ ‫استفاده‬
3
.
‫امنیت‬
‫پارامترهای‬ ‫طریق‬ ‫از‬ ‫‌ها‬
‫ه‬‫داد‬ :
bind
‫از‬ ‫تا‬ ‫‌شوند‬
‫ی‬‫م‬ ‫ارسال‬ ‫دیتابیس‬ ‫به‬ ‫‌ها‬
‫ی‬‫کوئر‬ ‫در‬ ‫شده‬
SQL Injection
‫جلوگیری‬
.‫شود‬
4
.
‫هدرها‬ ‫تنظیم‬
‫از‬ ‫پشتیبانی‬ ‫برای‬ ‫هدرها‬ :
CORS
‫و‬
JSON
.‫‌اند‬
‫ه‬‫شد‬ ‫تنظیم‬
‫یا‬ ،‫خطاها‬ ‫مدیریت‬ ،‫ورودی‬ ‫اعتبارسنجی‬ ‫مانند‬ ،‫کنید‬ ‫اضافه‬ ‫آن‬ ‫به‬ ‫بیشتری‬ ‫عملکردهای‬ ‫‌توانید‬
‫ی‬‫م‬ ‫و‬ ‫است‬ ‫گسترش‬ ‫قابل‬ ‫راحتی‬ ‫به‬ ‫نمونه‬ ‫این‬
.‫کاربران‬ ‫هویت‬ ‫احراز‬

oracle mysql/mariadb api -the connect engine

  • 1.
    ‫حق‬ ‫بسمه‬ / Mariadb OracleMysql Api ‫دخت‬ ‫اسمعیل‬ ‫یاشار‬ ‫مهندس‬ : ‫نویسنده‬ : ‫نسخه‬ 0.1
  • 2.
    : ‫نویسنده‬ ‫درباره‬ ‫رشته‬‫آموخته‬ ‫دانش‬ ‫دخت‬ ‫اسمعیل‬ ‫یاشار‬ ‫بنده‬ cyber security . ‫هستم‬ ‫از‬ ‫بیش‬ 16 . ‫دارم‬ ‫فعالیت‬ ‫سابقه‬ ‫سال‬ ‫مولف‬ - ‫مدرس‬ - ‫مشاور‬ : ‫داد‬ ‫شرح‬ ‫زیر‬ ‫های‬ ‫ساختار‬ ‫در‬ ‫میتوان‬ ‫را‬ ‫بنده‬ ‫های‬ ‫فعالیت‬ ‫جمله‬ ‫از‬ / / / / / / Devops Platform Cloud Eng |Gnu Linux System Network Security Storage / / Engineer Admin architecture & Oracle Dba | Linux Trainer |Consultant ): ‫جدید‬ ‫دنیاهای‬ ‫کشف‬ ‫و‬ ‫تحقیق‬ ‫و‬ ‫مطالعه‬ ‫به‬ ‫مند‬ ‫عالقه‬ . ‫کنم‬ ‫اشاره‬ ‫استراتژی‬ ‫های‬ ‫بازی‬ ‫و‬ ‫اوتلو‬ ‫و‬ ‫شطرنج‬ ‫بازی‬ ‫به‬ ‫میتوانم‬ ‫من‬ ‫های‬ ‫سرگرمی‬ ‫از‬ ‫واقع‬ ‫در‬ ‫تبریز‬ ‫الگ‬ ‫گذاران‬ ‫بنیان‬ ‫از‬ ‫یکی‬ ‫و‬ ‫لینوکس‬/‫گنو‬ ‫و‬ ‫باز‬ ‫متن‬ ‫دنیای‬ ‫عاشق‬ . ‫هستم‬ ‫عاشق‬ ‫یک‬ ‫من‬ : ‫کنید‬ ‫پیدا‬ ‫و‬ ‫کنید‬ ‫دنبال‬ ‫را‬ ‫من‬ ‫میتوانید‬ ‫چطور‬ ‫خب‬ : +9809991057856 Mob Telegram ID : yashar_esm Telegram channel : unixmens Instagram Account Linkedin Account :/ / in yashar_esmaildokht
  • 3.
    : ‫مشاوره‬ . ‫بود‬‫خواهم‬ ‫شما‬ ‫دسترس‬ ‫در‬ ‫من‬ . ‫فرمایید‬ ‫حاصل‬ ‫تماس‬ . ‫کردم‬ ‫اشاره‬ ‫قبل‬ ‫صفحه‬ ‫در‬ ‫که‬ ‫هایی‬ ‫کانال‬ ‫از‬ ‫میتوانید‬ ‫مشاوره‬ ‫جهت‬
  • 4.
    : ‫به‬ ‫تقدیم‬ ‫خدا‬ ‫شتافت‬‫یاریم‬ ‫به‬ ‫که‬ ‫بود‬ ‫او‬ ‫تنها‬ ‫هایم‬ ‫سختی‬ ‫در‬ ‫که‬ ‫چرا‬ ‫مادرم‬ ‫اویم‬ ‫مدیون‬ ‫که‬ ‫را‬ ‫حبت‬‫َم‬ ‫و‬ ‫انسانیت‬ ‫داد‬ ‫یاد‬ ‫و‬ . ‫کرد‬ ‫تقدیم‬ ‫زندگی‬ ‫به‬ ‫مرا‬ ‫که‬ ‫چرا‬ ‫پدرم‬ ‫اویم‬ ‫مدیون‬ ‫و‬ ‫بود‬ ‫من‬ ‫حامی‬ ‫همیشه‬ ‫روحش‬ ‫که‬ ‫عشقم‬ ‫هست‬ ‫و‬ ‫بود‬ ‫مشوقم‬ ‫که‬ ‫سورس‬ ‫اپن‬ ‫جامعه‬ ‫بشریت‬ ‫را‬ ‫هایش‬ ‫دانسته‬ ‫میکند‬ ‫منتشر‬ ‫و‬ ‫میخواند‬ ‫که‬ ‫او‬ ‫و‬ ): ‫هیچ‬ ‫دیگر‬ ‫و‬ ‫جهانی‬ ‫صلح‬ ‫امید‬ ‫به‬ ‫و‬
  • 5.
  • 6.
    ‫لینوکس‬ ‫و‬ ‫گنو‬‫تاریخچه‬ “ ‫مخفف‬ ‫گنو‬ .‫‌باشد‬ ‫ی‬‫م‬ ‫سازگار‬ ‫یونیکس‬ ‫با‬ ‫‌ای‬ ‫ه‬‫فزایند‬ ‫طــور‬ ‫به‬ ‫کــه‬ ‫بــوده‬ ‫آزاد‬ ‫کامال‬ ‫عامل‬ ‫سیــستم‬ ‫یک‬ ‫گنو‬ ‫عامل‬ ‫سیستم‬ ’ GNU s Not Unix ‫سپتامبر‬ ‫در‬ ‫را‬ ‫گنو‬ ‫پروژه‬ ‫اولیه‬ ‫اطالعیه‬ ‫استالمن‬ ‫ریچارد‬ .‫است‬ ” ۱۹۸۳ ‫سپتامبر‬ ‫در‬ ‫گنو‬ ‫اعالمیه‬ ‫نام‬ ‫به‬ ‫آن‬ ‫‌تر‬ ‫ل‬‫کام‬ ‫نسخه‬ .‫کرد‬ ‫منتشر‬ ۱۹۸۵ .‫است‬ ‫شده‬ ‫ترجمه‬ ‫زبان‬ ‫چندین‬ ‫به‬ ‫که‬ ‫شد‬ ‫منتشر‬ “ ‫برای‬ ‫بازگشتی‬ ‫مخفف‬ ‫یک‬ ،‫نخست‬ ‫‌کند؛‬ ‫ی‬‫م‬ ‫بــرطــرف‬ ‫را‬ ‫نیــازها‬ ‫از‬ ‫تعدادی‬ ‫که‬ ‫است‬ ‫شده‬ ‫انتخاب‬ ‫علت‬ ‫این‬ ‫به‬ »‫«گنو‬ ‫نام‬ ’ GNU s Not Unix .‫است‬ ‫جالب‬ ‫آن‬ )‫خواندن‬ ‫(یا‬ ‫گفتن‬ ‫آهنگ‬ ،‫سوم‬ ،‫است‬ ‫واقعی‬ ‫کلمه‬ ‫یک‬ ،‫دوم‬ ،‫است‬ ” ‫یا‬ ‫بپردازید‬ ‫مبلغی‬ ‫است‬ ‫ممکن‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫آوردن‬ ‫دست‬ ‫به‬ ‫برای‬ ‫شما‬ .‫قیمت‬ ‫نه‬ ،‫‌کند‬ ‫ی‬‫م‬ ‫اشاره‬ ‫آزادی‬ ‫به‬ »‫آزاد‬ ‫‌افزار‬ ‫م‬‫«نر‬ ‫در‬ »‫«آزاد‬ ‫کلمه‬ ‫آزادی‬ ،‫نخست‬ .‫داشت‬ ‫خواهید‬ ‫آن‬ ‫از‬ ‫استفاده‬ ‫برای‬ ‫ویــژه‬ ‫آزادی‬ ‫ســه‬ ،‫باشید‬ ‫داشتــه‬ ‫اختیار‬ ‫در‬ ‫را‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫وقتـی‬ ،‫صورت‬ ‫هر‬ ‫در‬ .‫نپردازید‬ ‫داشتن‬ ‫با‬ ،‫دلخواه‬ ‫طور‬ ‫به‬ ‫برنامه‬ ‫در‬ ‫تغییرات‬ ‫اعمال‬ ‫بــرای‬ ‫آزادی‬ ،‫دوم‬ ‫همــکاران؛‬ ‫و‬ ‫دوستان‬ ‫به‬ ‫آن‬ ‫دادن‬ ‫هدیه‬ ‫و‬ ‫برنامه‬ ‫از‬ ‫برداری‬ ‫نسخه‬ ‫برای‬ ‫را‬ ‫گنو‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫مجددا‬ ‫(اگر‬ .‫جامعه‬ ‫ساخت‬ ‫به‬ ‫کمک‬ ‫نهایت‬ ‫در‬ ‫و‬ ‫یافته‬ ‫بهبود‬ ‫نسخه‬ ‫توزیع‬ ‫برای‬ ‫آزادی‬ ،‫سوم‬ ‫منبع؛‬ ‫کدهای‬ ‫به‬ ‫کامل‬ ‫دسترسی‬ .)‫کنید‬ ‫هدیه‬ ‫رایگان‬ ‫طور‬ ‫به‬ ‫را‬ ‫آنها‬ ‫یا‬ ‫و‬ ‫کنید‬ ‫دریافت‬ ‫را‬ ‫مبلغی‬ ‫نسخه‬ ‫یک‬ ‫انتقال‬ ‫فیزیکی‬ ‫کار‬ ‫بــرای‬ ‫‌تــوانـید‬ ‫ی‬‫م‬ ،‫نمایید‬ ‫توزیع‬ ‫ســال‬ ‫در‬ .‫‌شود‬ ‫ی‬‫م‬ ‫نامیده‬ «‫گنو‬ ‫»پروژه‬ ،‫گنو‬ ‫سیستم‬ ‫توسعه‬ ‫پروژه‬ ۱۹۸۳ ‫در‬ ‫که‬ ‫همکاری‬ ‫روح‬ ‫بازگرداندن‬ ‫برای‬ ‫راهی‬ ‫عنوان‬ ‫به‬ ‫گنــو‬ ‫پــروژه‬ ‫انحصاری‬ ‫‌افزارهای‬ ‫م‬‫نر‬ ‫صاحبان‬ ‫توسط‬ ‫که‬ ‫موانع‬ ‫بردن‬ ‫بین‬ ‫از‬ ‫با‬ ‫تا‬ ‫شد‬ ‫ایجاد‬ ‫داشـت‬ ‫وجــود‬ ‫کامپیــوتر‬ ‫کاربران‬ ‫جامعه‬ ‫بین‬ ‫در‬ ‫نخست‬ ‫روزهای‬ .‫سازد‬ ‫ممکن‬ ‫را‬ ‫همکاری‬ ‫دیگر‬ ‫بار‬ ‫یک‬ ،‫بودند‬ ‫شده‬ ‫تحمیل‬ ‫سال‬ ‫در‬ ۱۹۷۱ ‫دانشگاه‬ ‫در‬ ‫را‬ ‫خود‬ ‫کار‬ ‫استالمن‬ ‫ریچارد‬ ‫که‬ ‫هنگامی‬ MIT ‫استفاده‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫از‬ ‫منحصرا‬ ‫کــه‬ ‫گــروهی‬ ‫در‬ ،‫کرد‬ ‫آغاز‬ ‫آزاد‬ ‫یکدیگر‬ ‫با‬ ‫همکاری‬ ‫در‬ ‫‌نویسان‬ ‫ه‬‫بــرنام‬ .‫‌کــردند‬ ‫ی‬‫م‬ ‫توزیع‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫اغلب‬ ‫نیز‬ ‫کامپیوتری‬ ‫‌های‬ ‫ت‬‫شرک‬ ‫حتی‬ .‫پرداخت‬ ‫کار‬ ‫به‬ ‫‌کردند‬ ‫ی‬‫م‬ .‫‌دادند‬ ‫ی‬‫م‬ ‫انجام‬ ‫را‬ ‫کار‬ ‫همین‬ ‫نیز‬ ‫اغلب‬ ‫و‬ ‫بودند‬ ‫دهه‬ ‫در‬ ۱۹۸۰ ‫منع‬ ‫را‬ ‫کاربزان‬ ‫توسط‬ ‫همکاری‬ ‫آنها‬ ‫مالکان‬ ‫و‬ ‫داشتند‬ ‫مالک‬ ‫که‬ ‫معنی‬ ‫این‬ ‫بــه‬ ،‫بودند‬ ‫انحصاری‬ ‫‌افزارها‬ ‫م‬‫نر‬ ‫تمام‬ ‫تقریبا‬ .‫‌کرد‬ ‫ی‬‫م‬ ‫ایجاب‬ ‫را‬ ‫گنو‬ ‫پروژه‬ ‫ضرورت‬ ‫کار‬ ‫این‬ ‫که‬ ‫‌کردند‬ ‫ی‬‫م‬ ‫‌توانید‬ ‫ی‬‫نم‬ ‫حتی‬ ‫شـما‬ ،‫بــاشـد‬ ‫نـداشـته‬ ‫وجــود‬ ‫آزادی‬ ‫عامل‬ ‫سـیـستم‬ ‫اگــر‬ ‫دارند؛‬ ‫نیــاز‬ ‫عامل‬ ‫سیستم‬ ‫یــک‬ ‫به‬ ‫کامپیوتر‬ ‫کاربران‬ ‫تمام‬ ‫عامل‬ ‫سیستم‬ ‫یک‬ ‫وجود‬ ،‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫در‬ ‫ضرورت‬ ‫اولیــن‬ ‫بنــابــراین‬ .‫کنید‬ ‫شروع‬ ‫را‬ ‫کامپیوتر‬ ‫با‬ ‫کار‬ ‫انحصاری‬ ‫‌افزارهای‬ ‫م‬‫نر‬ ‫از‬ ‫استفاده‬ ‫بدون‬ .‫است‬ ‫آزاد‬ ‫انتقال‬ ‫قابل‬ ‫و‬ ‫خورده‬ ‫محک‬ ‫قبال‬ ‫آن‬ ‫کلی‬ ‫طــراحی‬ ‫زیرا‬ ‫بساند‬ ‫یونیکس‬ ‫با‬ ‫منطبق‬ ‫عاملی‬ ‫سیستم‬ ‫تا‬ ‫گرفتند‬ ‫تصمیم‬ ‫آزاد‬ ‫افزاری‬ ‫نرم‬ ‫جنبش‬ .‫‌کرد‬ ‫ی‬‫م‬ ‫آسان‬ ‫را‬ ‫گنو‬ ‫به‬ ‫یونیکس‬ ‫کاربران‬ ‫حرکت‬ ‫سازگاری‬ ‫این‬ ‫همچنین‬ ‫و‬ ،‫بود‬ ،‫متن‬ ‫‌بندی‬ ‫ب‬‫قال‬ ‫‌های‬ ‫ه‬‫برنام‬ ،‫ویــرایشــگـرها‬ ،‫کامپــایـلرها‬ ‫شــامــل‬ ‫و‬ ‫اســت؛‬ ‫هسته‬ ‫یک‬ ‫از‬ ‫بیشتر‬ ‫خیلی‬ ‫یونیکس‬ ‫شبه‬ ‫عامل‬ ‫سیستم‬ ‫یک‬ ‫ژانویه‬ ‫در‬ .‫است‬ ‫بزرگی‬ ‫بسیار‬ ‫کار‬ ‫کامل‬ ‫عامل‬ ‫سیستم‬ ‫یک‬ ‫نوشتن‬ ‫بنابرایـن‬ .‫‌باشد‬ ‫ی‬‫م‬ ‫دیگر‬ ‫چیزهای‬ ‫خیلی‬ ‫و‬ ‫پستی‬ ‫‌افزارهای‬ ‫م‬‫نر‬ ۱۹۸۴ ‫شروع‬ ‫اکتبر‬ ‫در‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫بنیاد‬ .‫انجامید‬ ‫طول‬ ‫به‬ ‫سالها‬ ‫کردند‬ ‫کار‬ ‫به‬ ۱۹۸۵ .‫شد‬ ‫تاسیس‬ ‫گنو‬ ‫توسعه‬ ‫به‬ ‫کمک‬ ‫جهت‬ ‫سرمایه‬ ‫جذب‬ ‫برای‬ ‫بیشتر‬
  • 7.
    ‫سال‬ ‫تا‬ ۱۹۹۰ ‫سال‬ ‫در‬،‫یونیکس‬ ‫شبه‬ ‫هسته‬ ‫یک‬ ،‫لینوکس‬ ‫سپس‬ . ‫یافتند‬ ‫دست‬ ‫هسته‬ ‫جــز‬ ‫بــه‬ ،‫عامل‬ ‫سیستم‬ ‫اصلی‬ ‫اجزای‬ ‫تمامی‬ ‫به‬ ۱۹۹۱ ‫ســال‬ ‫در‬ ‫و‬ ‫کرد‬ ‫پیدا‬ ‫توسعه‬ ‫تروالدز‬ ‫لینوس‬ ‫توسط‬ ۱۹۹۲ ‫گنو‬ ‫کامل‬ ‫تقریبا‬ ‫سیستم‬ ‫با‬ ‫لینوکس‬ ‫ترکیب‬ .‫شد‬ ‫آزاد‬ ‫‌افـزار‬ ‫م‬‫نــر‬ ‫یــک‬ ‫‌های‬ ‫م‬‫سیست‬ ‫از‬ ‫نفر‬ ‫میلیون‬ ‫‌ها‬ ‫ه‬‫د‬ ‫‌اکنون‬ ‫م‬‫ه‬ ‫که‬ ‫‌شود‬ ‫ی‬‫م‬ ‫زده‬ ‫تخمــین‬ .‫لینوکس‬/‫گنـو‬ ‫سیستم‬ :‫شد‬ ‫کــامل‬ ‫عامــل‬ ‫سیستم‬ ‫یک‬ ‫به‬ ‫منجر‬ .‫‌کنند‬ ‫ی‬‫م‬ ‫استفاده‬ ‫غـیـره‬ ‫و‬ ‫ردهــت‬ ،‫دبیــان‬ ،‫اسلکور‬ ‫شــامــل‬ ،‫لینوکس‬/‫گنو‬ ‫را‬ ‫‌افزارها‬ ‫م‬‫نر‬ ‫از‬ ‫کامل‬ ‫مجموعه‬ ‫یک‬ ‫تا‬ ‫دارد‬ ‫نظر‬ ‫در‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫بنیاد‬ .‫است‬ ‫نشده‬ ‫محدود‬ ‫عامل‬ ‫سیستم‬ ‫یک‬ ‫به‬ ‫فقط‬ ‫گنو‬ ‫پروژه‬ ،‫حال‬ ‫این‬ ‫با‬ .‫‌شود‬ ‫ی‬‫م‬ ‫نیز‬ ‫کاربردی‬ ‫‌افزارهای‬ ‫م‬‫نـر‬ ‫شــامــل‬ ‫مــوضــوع‬ ‫ایــن‬ .‫باشند‬ ‫داشته‬ ‫‌خواهند‬ ‫ی‬‫م‬ ‫کاربــران‬ ‫از‬ ‫بسیاری‬ ‫که‬ ‫آنچه‬ ‫هر‬ ، ‫کند‬ ‫ایجاد‬ ‫بنیاد‬ ‫جهت‬ ‫همین‬ ‫به‬ ‫کنند‬ ‫تهیه‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫نیز‬ ‫ندارند‬ ‫مهارت‬ ‫کامپیـوتر‬ ‫زمینه‬ ‫در‬ ‫که‬ ‫کاربرانی‬ ‫برای‬ ‫دارد‬ ‫قصد‬ ‫همچنین‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫بنیاد‬ .‫کرد‬ ‫ایجاد‬ ،‫گنو‬ ‫سیستم‬ ‫از‬ ‫استفاده‬ ‫در‬ ‫‌کار‬ ‫ه‬‫تاز‬ ‫کاربران‬ ‫به‬ ‫کمک‬ ‫منظور‬ ‫به‬ ‫گرافیکی‬ ‫کار‬ ‫میز‬ ‫یک‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ .‫است‬ ‫دسترس‬ ‫در‬ ‫‌اکنون‬ ‫م‬‫ه‬ ‫آزاد‬ ‫بازی‬ ‫تعدادی‬ .‫کند‬ ‫ایجاد‬ ‫نیز‬ ‫دیگــری‬ ‫تفریح‬ ‫ابزارهای‬ ‫و‬ ‫‌ها‬ ‫ی‬‫باز‬ ‫‌خــواهد‬ ‫ی‬‫م‬ ‫همچنین‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫بنیاد‬ ‫به‬ ‫را‬ ‫گنو‬ ‫‌افزار‬ ‫م‬‫نر‬ ،‫انحصاری‬ ‫سیستم‬ ‫مانند‬ ‫قوانینی‬ ‫که‬ ‫زمانی‬ ‫جز‬ ‫بـه‬ ،‫نـدارد‬ ‫وجــود‬ ‫محدودیتی‬ ‫هیچ‬ ‫برود؟‬ ‫پیش‬ ‫‌تواند‬ ‫ی‬‫م‬ ‫کجا‬ ‫تا‬ ‫آزاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫دهند‬ ‫انجام‬ ‫‌خواهند‬ ‫ی‬‫م‬ ‫کامپیوتر‬ ‫کاربران‬ ‫که‬ ‫کارهایی‬ ‫تمام‬ ‫انجام‬ ‫برای‬ ‫آزاد‬ ‫‌افزارهای‬ ‫م‬‫نر‬ ‫کردن‬ ‫فراهم‬ ‫نــهـایی‬ ‫هــدف‬ .‫کننــد‬ ‫منع‬ ‫کامل‬ ‫طور‬ .‫‌باشد‬ ‫ی‬‫م‬ ‫انحصاری‬ ‫‌افزارهای‬ ‫م‬‫نر‬ ‫کردن‬ ‫مطرود‬ ‫نتیجه‬ ‫در‬ ‫و‬
  • 8.
    ‫باز‬ ‫متن‬ ‫افزار‬‫نرم‬ Open Source Software ‫مقدمه‬ ‫قواعد‬ ‫گذاشته‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫اکوسیستم‬ ‫در‬ ‫‌گذاران‬ ‫ه‬‫سرمای‬ ‫اقتصادی‬ ‫رفتار‬ ‫بر‬ ‫که‬ ‫‌ای‬ ‫ه‬‫مالحظ‬ ‫قابل‬ ‫تأثیر‬ ‫با‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫افزار‬ ‫نرم‬ ‫تولید‬ ‫فشار‬ ‫شرکتها‬ ،‫باشند‬ ‫کد‬ ‫کننده‬ ‫اعمال‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫سعی‬ ‫‌دهنگان‬ ‫ه‬‫توسع‬ ‫تازه‬ ‫محیط‬ ‫این‬ ‫در‬ .‫است‬ ‫داده‬ ‫تغییر‬ ‫را‬ ‫بازی‬ .‫‌کشند‬ ‫ی‬‫م‬ ‫را‬ ‫سرشاری‬ ‫سود‬ ‫انتظار‬ ‫سیستم‬ ‫فروشندگان‬ ‫و‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫حس‬ ‫را‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫محصوالت‬
  • 9.
    ۱ ‫معرفی‬ . ‫فعل‬ ‫در‬‫عمده‬ ‫تغییراتی‬ ‫اتفاق‬ ‫این‬ .‫است‬ ‫آورده‬ ‫بار‬ ‫به‬ ‫کاربران‬ ‫برای‬ ‫ارزانتر‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫از‬ ‫بیش‬ ‫چیزی‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫ظهور‬ .‫است‬ ‫کرده‬ ‫ایجاد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫حوزه‬ ‫بازیگران‬ ‫بین‬ ‫اقتصادی‬ ‫انفعال‬ ‫و‬ ‫معنای‬ ‫به‬ ‫اما‬ ‫است‬ - ‫زندگی‬ ‫از‬ ‫سبکی‬ ‫حتی‬ ‫یا‬ - ‫‌افزار‬ ‫م‬‫نر‬ ‫توسعه‬ ‫به‬ ‫ویژه‬ ‫نگاهی‬ ‫تجسم‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫‌ها‬ ‫ی‬‫خیل‬ ‫برای‬ ‫جامعه‬ ‫رشد‬ ‫برای‬ ‫باید‬ ‫شرکتها‬ ‫که‬ ‫است‬ ‫این‬ ‫گابریل‬ ‫ریچارد‬ ‫و‬ ‫گلدمن‬ ‫ران‬ ‫پیشنهاد‬ .‫هست‬ ‫هم‬ ‫تجاری‬ ‫تدبیر‬ ‫نوعی‬ .‫نمایند‬ ‫ایجاد‬ ‫خدماتشان‬ ‫و‬ ‫محصوالت‬ ‫اطراف‬ ‫زنده‬ ‫محیطی‬ ‫و‬ ‫کنند‬ ‫استفاده‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫از‬ ‫کاربرانشان‬ ‫به‬ ‫است‬ ‫نیاز‬ ‫مورد‬ ‫کاربر‬ ‫احتیاجات‬ ‫با‬ ‫آن‬ ‫دادن‬ ‫تطبیق‬ ‫برای‬ ‫که‬ ‫را‬ ‫کد‬ ‫متن‬ ‫و‬ ‫است‬ ‫رایگان‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫معمول‬ ‫بطور‬ ‫مبلغی‬ ‫دریافت‬ ‫ازای‬ ‫در‬ ‫را‬ ‫ممکن‬ ‫تغییرات‬ ‫بعالوه‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫بازپخش‬ ‫اجازه‬ ‫کاربر‬ ‫به‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌های‬ ‫ه‬‫پروان‬ ‫اغلب‬ .‫دارد‬ ‫همراه‬ ( ‫باشد‬ ‫دسترس‬ ‫در‬ ‫عمومی‬ ‫بصورت‬ ‫کد‬ ‫متن‬ ‫تغییرات‬ ‫که‬ ‫زمانی‬ ‫تا‬ ‫‌دهند‬ ‫ی‬‫م‬ ‫بازپخش‬ ‫برای‬ . . www opensource org .) ‫یک‬ ‫اینکه‬ ‫بجای‬ .‫‌دهد‬ ‫ی‬‫م‬ ‫توسعه‬ ‫جامعه‬ ‫که‬ ‫است‬ ‫‌افزاری‬ ‫م‬‫نر‬ ‫جمعی‬ ‫‌باز‬ ‫ن‬‫مت‬ .‫دارد‬ ‫وجود‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫نوع‬ ‫دو‬ ‫از‬ ‫یک‬ ‫کدام‬ ‫که‬ ‫‌گیرند‬ ‫ی‬‫م‬ ‫تصمیم‬ ‫داوطلبان‬ ‫از‬ ‫برگزیده‬ ‫گروهی‬ ‫گاهی‬ ‫باشد‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫مالک‬ ‫حقوقی‬ ‫شخصیت‬ ‫‌دهندگان‬ ‫ه‬‫توسع‬ .‫برود‬ ‫سو‬ ‫کدام‬ ‫به‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫و‬ ‫شوند‬ ‫پذیرفته‬ ‫اصلی‬ ‫کد‬ ‫متن‬ ‫به‬ ‫ورود‬ ‫برای‬ ‫شده‬ ‫اعمال‬ ‫همکاریهای‬ ‫آپاچی‬ ‫وب‬ ‫سرور‬ ‫مورد‬ ‫مانند‬ ‫‌گیرند‬ ‫ی‬‫م‬ ‫تصمیم‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫درباره‬ ‫بخصوص‬ ‫شرکت‬ ‫یک‬ ‫نه‬ ‫و‬ ‫کد‬ ‫کنندگان‬ ‫اعمال‬ ،‫شخصی‬ ( . . httpd apache org .) ‫در‬ ‫را‬ ‫تالیف‬ ‫حق‬ ‫شرکت‬ .‫است‬ ‫آن‬ ‫‌دهنده‬ ‫ه‬‫توسع‬ ‫و‬ ‫مالک‬ ،‫سود‬ ‫پی‬ ‫در‬ ‫شخصیتی‬ ‫که‬ ‫است‬ ‫‌افزاری‬ ‫م‬‫نر‬ ‫تجاری‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫مانند‬ ‫دهد‬ ‫انجام‬ ‫کاری‬ ‫چه‬ ‫آینده‬ ‫در‬ ‫و‬ ‫بپذیرد‬ ‫اصلی‬ ‫کد‬ ‫متن‬ ‫به‬ ‫ورود‬ ‫برای‬ ‫را‬ ‫کد‬ ‫کدام‬ ‫که‬ ‫‌کند‬ ‫ی‬‫م‬ ‫تعیین‬ ‫و‬ ‫دارد‬ ‫اختیار‬ ‫مورد‬ MySQL ‫داده‬ ‫پایگاه‬ ‫و‬ ( . . ) MySQL www mysql com . ‫متمرکز‬ ‫کار‬ ‫نیروی‬ ‫اقتصاد‬ ‫بر‬ ‫اغلب‬ ‫جامعه‬ ‫بوسیله‬ ‫شده‬ ‫داده‬ ‫توسعه‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫اقتصاد‬ ‫درباره‬ ‫پیشین‬ ‫مطالعات‬ ‫اشاره‬ ‫ریموند‬ ‫اریک‬ .‫‌یابد‬ ‫ی‬‫م‬ ‫تخصیص‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫به‬ ‫‌آوری‬ ‫ب‬‫تعج‬ ‫فراوان‬ ‫داوطلبانه‬ ‫کار‬ ‫میزان‬ ‫آن‬ ‫در‬ ‫که‬ ‫است‬ ‫کمک‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌های‬ ‫ه‬‫پروژ‬ ‫به‬ ‫همتایانشان‬ ‫بین‬ ‫اعتبار‬ ‫افزایش‬ ‫از‬ ‫ناشی‬ ‫شخصی‬ ‫لذت‬ ‫بخاطر‬ ‫‌دهندگان‬ ‫ه‬‫توسع‬ ‫که‬ ‫‌کند‬ ‫ی‬‫م‬ . ‫رسیدند‬ ‫مشابهی‬ ‫نتیجه‬ ‫به‬ ‫نیز‬ ‫خود‬ ‫تجربی‬ ‫مطالعه‬ ‫در‬ ‫همکارانش‬ ‫و‬ ‫هارووی‬ ‫ارنان‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫‌انداز‬ ‫م‬‫چش‬ ‫بهبود‬ ‫و‬ ‫فنی‬ ‫تواناییهای‬ ‫کردن‬ ‫مستند‬ ‫برای‬ ‫‌دهندگان‬ ‫ه‬‫توسع‬ ‫که‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫استدالل‬ ‫تیروله‬ ‫جین‬ ،‫لرنرو‬ ‫جاشوا‬ ‫لذت‬ ‫که‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫گزارش‬ ‫گلف‬ ‫رابرت‬ ‫الخانیو‬ ‫کریم‬ ‫و‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫کمک‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌های‬ ‫ه‬‫پروژ‬ ‫به‬ ‫آتی‬ ‫کارفرمایان‬ ‫برای‬ ‫شغلی‬ ‫نشان‬ ‫مطالعه‬ ‫این‬ ‫گرچه‬ ‫است‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌های‬ ‫ه‬‫پروژ‬ ‫به‬ ‫‌دهندگان‬ ‫ه‬‫توسع‬ ‫کمک‬ ‫برای‬ ‫مهمی‬ ‫ذاتی‬ ‫محرک‬ ‫کار‬ ‫از‬ ‫بردن‬ .‫‌اند‬ ‫م‬‫مه‬ ‫هم‬ ‫مالی‬ ‫‌های‬ ‫ه‬‫انگیز‬ ‫که‬ ‫‌دهد‬ ‫ی‬‫م‬
  • 10.
    ‫را‬ ‫اشخاصی‬ ‫شرکتها‬‫چرا‬ ‫که‬ ‫‌دهد‬ ‫ی‬‫نم‬ ‫شرح‬ ‫را‬ ‫این‬ ‫اما‬ ‫است‬ ‫داوطلبانه‬ ‫کار‬ ‫برای‬ ‫توضیحات‬ ‫از‬ ‫‌ای‬ ‫ه‬‫پار‬ ‫اینها‬ ‫که‬ ‫حالی‬ ‫در‬ ‫همکارانش‬ ‫و‬ ‫هان‬ ‫هورن‬ ‫ایل‬ .‫‌کنند‬ ‫ی‬‫م‬ ‫کمک‬ ‫‌باز‬ ‫ن‬‫مت‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫‌های‬ ‫ه‬‫پروژ‬ ‫به‬ ‫شرکت‬ ‫کاری‬ ‫زمان‬ ‫در‬ ‫که‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫استخدام‬ ‫در‬ ‫آنها‬ ‫رتبه‬ ‫با‬ ‫مستقیمی‬ ‫رابطه‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫کمک‬ ‫آپاچی‬ ‫افزار‬ ‫نرم‬ ‫بنیاد‬ ‫پروژه‬ ‫به‬ ‫که‬ ‫کسانی‬ ‫حقوق‬ ‫که‬ ‫دریافتند‬ ‫معیاری‬ ‫عنوان‬ ‫به‬ ‫را‬ ‫بنیاد‬ ‫در‬ ‫‌دهندگان‬ ‫ه‬‫توسع‬ ‫رتبه‬ ‫کارفرمایان‬ ‫که‬ ‫گرفتند‬ ‫نتیجه‬ ‫محققین‬ ‫پس‬ .‫دارد‬ ‫آپاچی‬ ‫تشکیالت‬ .‫‌گیرند‬ ‫ی‬‫م‬ ‫بکار‬ ‫مولد‬ ‫‌های‬ ‫ی‬‫توانای‬ ‫سنجش‬ ‫برای‬
  • 11.
    ‫مقدمه‬ Database DevOps ‫‌های‬ ‫ه‬‫شیو‬ ‫ترکیب‬‫به‬ DevOps ‫و‬ ‫همکاری‬ ‫بهبود‬ ‫آن‬ ‫هدف‬ ‫و‬ ‫دارد‬ ‫اشاره‬ ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ‫مدیریت‬ ‫با‬ ‫‌طور‬ ‫ه‬‫ب‬ ‫تا‬ ‫‌کند‬ ‫ی‬‫م‬ ‫کمک‬ ‫‌ها‬ ‫ن‬‫سازما‬ ‫به‬ ‫رویکرد‬ ‫این‬ .‫است‬ ‫داده‬ ‫پایگاه‬ ‫مدیریت‬ ‫‌های‬ ‫م‬‫تی‬ ‫و‬ ‫‌افزار‬ ‫م‬‫نر‬ ‫‌دهنده‬ ‫ه‬‫توسع‬ ‫‌های‬ ‫م‬‫تی‬ ‫بین‬ ‫هماهنگی‬ .‫کنند‬ ‫مستقر‬ ‫و‬ ‫تست‬ ،‫توسعه‬ ‫را‬ ‫‌افزارها‬ ‫م‬‫نر‬ ‫مؤثرتری‬ ‫و‬ ‫‌تر‬ ‫ع‬‫سری‬ ‫نقش‬ API ‫در‬ ‫ها‬ Database DevOps ( ) API Application Programming Interface ‫در‬ ‫ها‬ Database DevOps ‫زیر‬ ‫در‬ .‫‌کنند‬ ‫ی‬‫م‬ ‫ایفا‬ ‫مهمی‬ ‫بسیار‬ ‫نقش‬ :‫‌شود‬ ‫ی‬‫م‬ ‫اشاره‬ ‫‌ها‬ ‫ش‬‫نق‬ ‫این‬ ‫از‬ ‫برخی‬ ‫به‬ 1 . ‫‌ها‬ ‫م‬‫سیست‬ ‫بین‬ ‫ارتباط‬ : API ‫ارتباط‬ ‫این‬ .‫‌کنند‬ ‫ی‬‫م‬ ‫عمل‬ ‫‌ها‬ ‫م‬‫سیست‬ ‫سایر‬ ‫و‬ ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ‫بین‬ ‫ارتباط‬ ‫برای‬ ‫واسطی‬ ‫عنوان‬ ‫به‬ ‫ها‬ .‫باشد‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫روی‬ ‫بر‬ ‫مختلف‬ ‫عملیات‬ ‫انجام‬ ‫و‬ ‫خدمات‬ ‫فراخوانی‬ ،‫‌ها‬ ‫ه‬‫داد‬ ‫تبادل‬ ‫شامل‬ ‫‌تواند‬ ‫ی‬‫م‬ 2 . ‫فرآیندها‬ ‫خودکارسازی‬ ‫از‬ ‫استفاده‬ ‫با‬ : API ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ‫مدیریت‬ ‫و‬ ‫پیکربندی‬ ،‫استقرار‬ ‫مانند‬ ‫مختلف‬ ‫فرآیندهای‬ ‫‌توان‬ ‫ی‬‫م‬ ،‫ها‬ .‫‌کند‬ ‫ی‬‫م‬ ‫کمک‬ ‫استقرار‬ ‫و‬ ‫توسعه‬ ‫در‬ ‫سرعت‬ ‫افزایش‬ ‫و‬ ‫خطاها‬ ‫کاهش‬ ‫به‬ ‫خودکارسازی‬ ‫این‬ .‫کرد‬ ‫خودکار‬ ‫را‬ 3 . ‫اعتبارسنجی‬ ‫و‬ ‫تست‬ : API ‫‌های‬ ‫ت‬‫تس‬ ‫ایجاد‬ ‫با‬ .‫شوند‬ ‫استفاده‬ ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ‫عملکرد‬ ‫اعتبارسنجی‬ ‫و‬ ‫تست‬ ‫برای‬ ‫‌توانند‬ ‫ی‬‫م‬ ‫ها‬ ‫برای‬ ‫خودکار‬ API ‫ایجاد‬ ‫مشکلی‬ ‫هیچ‬ ‫و‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫عمل‬ ‫درستی‬ ‫به‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫تغییرات‬ ‫که‬ ‫کرد‬ ‫حاصل‬ ‫اطمینان‬ ‫‌توان‬ ‫ی‬‫م‬ ،‫ها‬ .‫‌کنند‬ ‫ی‬‫نم‬ 4 . ‫تغییرات‬ ‫مدیریت‬ : API ‫از‬ ‫استفاده‬ ‫با‬ .‫کنند‬ ‫عمل‬ ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ‫در‬ ‫تغییرات‬ ‫مدیریت‬ ‫برای‬ ‫ابزاری‬ ‫عنوان‬ ‫به‬ ‫‌توانند‬ ‫ی‬‫م‬ ‫ها‬ API .‫کرد‬ ‫جلوگیری‬ ‫مشکالت‬ ‫بروز‬ ‫از‬ ‫و‬ ‫داد‬ ‫انجام‬ ‫مستند‬ ‫و‬ ‫‌شده‬ ‫ل‬‫کنتر‬ ‫‌طور‬ ‫ه‬‫ب‬ ‫را‬ ‫تغییرات‬ ‫‌توان‬ ‫ی‬‫م‬ ،‫ها‬ 5 . ‫تحلیل‬ ‫و‬ ‫تجزیه‬ ‫و‬ ‫نظارت‬ : API ‫‌ها‬ ‫ه‬‫داد‬ ‫این‬ .‫کنند‬ ‫کمک‬ ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ‫عملکرد‬ ‫به‬ ‫مربوط‬ ‫‌های‬ ‫ه‬‫داد‬ ‫‌آوری‬ ‫ع‬‫جم‬ ‫به‬ ‫‌توانند‬ ‫ی‬‫م‬ ‫ها‬ .‫شوند‬ ‫استفاده‬ ‫مشکالت‬ ‫شناسایی‬ ‫و‬ ‫عملکرد‬ ‫بر‬ ‫نظارت‬ ‫برای‬ ‫‌توانند‬ ‫ی‬‫م‬ 6 . ‫‌ها‬ ‫س‬‫میکروسروی‬ ‫توسعه‬ ،‫‌ها‬ ‫س‬‫میکروسروی‬ ‫معماری‬ ‫در‬ : API ‫داده‬ ‫پایگاه‬ ‫به‬ ‫‌تواند‬ ‫ی‬‫م‬ ‫میکروسرویس‬ ‫هر‬ .‫دارند‬ ‫کلیدی‬ ‫نقش‬ ‫ها‬ ‫از‬ ‫و‬ ‫شود‬ ‫متصل‬ ‫خود‬ ‫خاص‬ API .‫کند‬ ‫استفاده‬ ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ‫و‬ ‫‌ها‬ ‫س‬‫میکروسروی‬ ‫سایر‬ ‫با‬ ‫تعامل‬ ‫برای‬ ‫ها‬ ،‫مجموع‬ ‫در‬ API ‫در‬ ‫فرآیندها‬ ‫خودکارسازی‬ ‫و‬ ‫ارتباطات‬ ‫تسهیل‬ ‫به‬ ‫ها‬ Database DevOps ‫را‬ ‫امکان‬ ‫این‬ ‫‌ها‬ ‫م‬‫تی‬ ‫به‬ ‫و‬ ‫‌کنند‬ ‫ی‬‫م‬ ‫کمک‬ .‫دهند‬ ‫پاسخ‬ ‫تجاری‬ ‫نیازهای‬ ‫به‬ ‫مؤثرتری‬ ‫‌طور‬ ‫ه‬‫ب‬ ‫که‬ ‫‌دهند‬ ‫ی‬‫م‬
  • 12.
    ‫؟‬ ‫چه‬ ‫یعنی‬‫دواپس‬ ‫فرهنگ‬ 1 . Learn to trust :)‫اعتماد‬ ‫(یادگیری‬ .‫است‬ ‫ضروری‬ ‫کاری‬ ‫استرس‬ ‫کاهش‬ ‫و‬ ‫بهتر‬ ‫همکاری‬ ‫برای‬ ‫تیم‬ ‫اعضای‬ ‫بین‬ ‫اعتماد‬ ‫ایجاد‬ :‫اهمیت‬ .‫بگذارند‬ ‫اشتراک‬ ‫به‬ ‫را‬ ‫مشکالت‬ ‫و‬ ،‫دانش‬ ،‫اطالعات‬ ‫‌توانند‬ ‫ی‬‫م‬ ‫بهتر‬ ‫‌ها‬ ‫م‬‫تی‬ ،‫باشد‬ ‫داشته‬ ‫وجود‬ ‫اعتماد‬ ‫وقتی‬ ‫است؟‬ ‫مهم‬ ‫چرا‬ ‫شود؟‬ ‫عملی‬ ‫چگونه‬ .‫کنید‬ ‫استفاده‬ ‫‌ها‬ ‫ی‬‫‌گیر‬ ‫م‬‫تصمی‬ ‫در‬ ‫شفافیت‬ ‫از‬ .‫باشند‬ ‫داشته‬ ‫بیشتری‬ ‫‌پذیری‬ ‫ت‬‫مسئولی‬ ‫دهید‬ ‫اجازه‬ ‫تیم‬ ‫اعضای‬ ‫به‬
  • 13.
    2 . Understand motivations :)‫‌ها‬ ‫ه‬‫انگیز‬ ‫(درک‬ .‫‌کند‬ ‫ی‬‫م‬‫کمک‬ ‫تیمی‬ ‫تعامالت‬ ‫بهبود‬ ‫به‬ ‫افراد‬ ‫اهداف‬ ‫و‬ ‫رفتار‬ ‫پشت‬ ‫دالیل‬ ‫درک‬ :‫اهمیت‬ .‫کنیم‬ ‫همکاری‬ ‫و‬ ‫کنیم‬ ‫برقرار‬ ‫ارتباط‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫با‬ ‫‌توانیم‬ ‫ی‬‫م‬ ‫بهتر‬ ،‫دارند‬ ‫خاصی‬ ‫رفتار‬ ‫ما‬ ‫همکاران‬ ‫چرا‬ ‫بدانیم‬ ‫اگر‬ ‫است؟‬ ‫مهم‬ ‫چرا‬ ‫شود؟‬ ‫عملی‬ ‫چگونه‬ .‫کنید‬ ‫برگزار‬ ‫سازمانی‬ ‫و‬ ‫فردی‬ ‫اهداف‬ ‫‌سازی‬ ‫ف‬‫شفا‬ ‫برای‬ ‫منظم‬ ‫جلسات‬ .‫کنید‬ ‫تشویق‬ ‫را‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫و‬ ‫دهید‬ ‫گوش‬ ‫تیم‬ ‫اعضای‬ ‫بازخورد‬ ‫به‬ 3 . Eliminate blame :)‫‌یابی‬ ‫ر‬‫مقص‬ ‫(حذف‬ .‫‌شود‬ ‫ی‬‫م‬ ‫اشتباهات‬ ‫از‬ ‫یادگیری‬ ‫و‬ ‫نوآوری‬ ‫مانع‬ ‫‌یابی‬ ‫ر‬‫مقص‬ ‫فرهنگ‬ :‫اهمیت‬ .‫سرزنش‬ ‫از‬ ‫ترس‬ ‫نه‬ ،‫باشند‬ ‫یادگیری‬ ‫برای‬ ‫فرصتی‬ ‫اشتباهات‬ ‫که‬ ‫کنند‬ ‫کار‬ ‫محیطی‬ ‫در‬ ‫باید‬ ‫‌ها‬ ‫م‬‫تی‬ ‫است؟‬ ‫مهم‬ ‫چرا‬ ‫شود؟‬ ‫عملی‬ ‫چگونه‬ ‫از‬ " Blameless Postmortem .‫کنید‬ ‫استفاده‬ )‫‌یابی‬ ‫ر‬‫مقص‬ ‫بدون‬ ‫(تحلیل‬ " .‫مقصر‬ ‫یافتن‬ ‫نه‬ ،‫کنید‬ ‫تمرکز‬ ‫مشکل‬ ‫حل‬ ‫روی‬ ‫بر‬ 4 . Embrace smart failure :)‫هوشمندانه‬ ‫‌های‬ ‫ت‬‫شکس‬ ‫(پذیرش‬ .‫است‬ ‫نوآوری‬ ‫و‬ ‫یادگیری‬ ‫از‬ ‫طبیعی‬ ‫بخشی‬ ‫شکست‬ :‫اهمیت‬ .‫کنند‬ ‫‌تر‬ ‫ی‬‫قو‬ ‫را‬ ‫تیم‬ ‫و‬ ‫شود‬ ‫گرفته‬ ‫درس‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫از‬ ‫که‬ ‫هستند‬ ‫اشتباهاتی‬ ‫معنی‬ ‫به‬ ‫هوشمندانه‬ ‫‌های‬ ‫ت‬‫شکس‬ ‫است؟‬ ‫مهم‬ ‫چرا‬ ‫شود؟‬ ‫عملی‬ ‫چگونه‬ .‫دهید‬ ‫ترویج‬ ‫تیم‬ ‫در‬ ‫را‬ ‫مداوم‬ ‫یادگیری‬ ‫فرهنگ‬ .‫کنید‬ ‫تبدیل‬ ‫فرآیند‬ ‫از‬ ‫بخشی‬ ‫به‬ ‫را‬ ‫‌شده‬ ‫ه‬‫آموخت‬ ‫‌های‬ ‫س‬‫در‬ ‫مستندسازی‬ 5 . Focus on bottlenecks and flow :)‫کار‬ ‫جریان‬ ‫و‬ ‫‌ها‬ ‫ه‬‫گلوگا‬ ‫بر‬ ‫(تمرکز‬ .‫است‬ ‫ضروری‬ ‫تیم‬ ‫‌وری‬ ‫ه‬‫بهر‬ ‫افزایش‬ ‫برای‬ ‫کار‬ ‫جریان‬ ‫در‬ ‫موانع‬ ‫حل‬ ‫و‬ ‫شناسایی‬ :‫اهمیت‬ .‫‌شوند‬ ‫ی‬‫م‬ ‫مشتریان‬ ‫به‬ ‫ارزش‬ ‫تحویل‬ ‫شدن‬ ‫کند‬ ‫باعث‬ ‫‌ها‬ ‫ه‬‫گلوگا‬ ‫است؟‬ ‫مهم‬ ‫چرا‬ ‫شود؟‬ ‫عملی‬ ‫چگونه‬ ‫مانند‬ ‫ابزارهایی‬ ‫از‬ Value Stream Mapping .‫کنید‬ ‫استفاده‬ ‫‌ها‬ ‫ه‬‫گلوگا‬ ‫شناسایی‬ ‫برای‬ .‫دهید‬ ‫بهبود‬ ‫مرتبًا‬ ‫را‬ ‫فرآیندها‬ 6 . Eliminate unplanned work :)‫‌نشده‬ ‫ی‬‫‌ریز‬ ‫ه‬‫برنام‬ ‫کارهای‬ ‫(حذف‬ .‫‌شوند‬ ‫ی‬‫م‬ ‫تیم‬ ‫استرس‬ ‫افزایش‬ ‫و‬ ‫کار‬ ‫جریان‬ ‫در‬ ‫اختالل‬ ‫باعث‬ ‫اغلب‬ ‫‌نشده‬ ‫ی‬‫‌ریز‬ ‫ه‬‫برنام‬ ‫کارهای‬ :‫اهمیت‬
  • 14.
    .‫‌شوند‬ ‫ی‬‫م‬ ‫مهم‬ ‫و‬‫اصلی‬ ‫وظایف‬ ‫بر‬ ‫تمرکز‬ ‫کاهش‬ ‫باعث‬ ‫کارها‬ ‫نوع‬ ‫این‬ ‫است؟‬ ‫مهم‬ ‫چرا‬ ‫شود؟‬ ‫عملی‬ ‫چگونه‬ .‫کنید‬ ‫خودکار‬ ‫را‬ ‫فرآیندها‬ .‫باشید‬ ‫پایبند‬ ‫آن‬ ‫به‬ ‫و‬ ‫کنید‬ ‫تهیه‬ ‫وظایف‬ ‫از‬ ‫شده‬ ‫‌بندی‬ ‫ت‬‫اولوی‬ ‫لیست‬ ‫یک‬ 7 . Be continuous :)‫باشید‬ ‫(پیوسته‬ ‫کلیدی‬ ‫اصول‬ ‫از‬ ‫یکی‬ ‫مستمر‬ ‫بهبود‬ ‫و‬ ‫مستمر‬ ‫تحویل‬ :‫اهمیت‬ DevOps .‫است‬ .‫است‬ ‫تغییرات‬ ‫به‬ ‫‌گویی‬ ‫خ‬‫پاس‬ ‫و‬ ‫باال‬ ‫کیفیت‬ ‫حفظ‬ ‫معنی‬ ‫به‬ ‫پایدار‬ ‫و‬ ‫مستمر‬ ‫کار‬ ‫است؟‬ ‫مهم‬ ‫چرا‬ ‫شود؟‬ ‫عملی‬ ‫چگونه‬
  • 15.
  • 16.
    MariaDB CONNECT Engine ‫در‬‫‌سازی‬ ‫ه‬‫ذخیر‬ ‫موتور‬ ‫یک‬ MariaDB ‫داده‬ ‫منابع‬ ‫به‬ ‫تا‬ ‫‌دهد‬ ‫ی‬‫م‬ ‫را‬ ‫امکان‬ ‫این‬ ‫شما‬ ‫به‬ ‫که‬ ‫است‬ ‫و‬ ‫دیگر‬ ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ،‫‌ها‬ ‫ل‬‫فای‬ ‫جمله‬ ‫از‬ ،‫مختلف‬ API ‫های‬ REST ‫ادغام‬ ‫برای‬ ‫‌ویژه‬ ‫ه‬‫ب‬ ‫موتور‬ ‫این‬ .‫کنید‬ ‫پیدا‬ ‫دسترسی‬ ‫یکپارچه‬ ‫‌صورت‬ ‫ه‬‫ب‬ ، .‫است‬ ‫مفید‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫از‬ ‫واحد‬ ‫نمای‬ ‫یک‬ ‫ایجاد‬ ‫و‬ ‫مختلف‬ ‫منابع‬ ‫از‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫کاربردهای‬ ‫و‬ ‫‌ها‬ ‫ی‬‫ویژگ‬ MariaDB CONNECT Engine 1 . ‫متنوع‬ ‫داده‬ ‫منابع‬ ‫به‬ ‫دسترسی‬ : • CONNECT Engine ‫‌های‬ ‫ل‬‫فای‬ ‫مانند‬ ‫‌ای‬ ‫ه‬‫داد‬ ‫منابع‬ ‫به‬ ‫که‬ ‫‌دهد‬ ‫ی‬‫م‬ ‫را‬ ‫امکان‬ ‫این‬ ‫شما‬ ‫به‬ CSV، JSON، XML ‫و‬ ، ‫(مانند‬ ‫دیگر‬ ‫داده‬ ‫‌های‬ ‫ه‬‫پایگا‬ ‫همچنین‬ MySQL، PostgreSQL .‫کنید‬ ‫پیدا‬ ‫دسترسی‬ )‫غیره‬ ‫و‬ 2 . ‫‌های‬ ‫ه‬‫دستگا‬ REST API : • ‫از‬ ‫استفاده‬ ‫با‬ CONNECT Engine ‫به‬ ‫‌توانید‬ ‫ی‬‫م‬ ، API ‫های‬ REST ‫‌صورت‬ ‫ه‬‫ب‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫و‬ ‫کنید‬ ‫پیدا‬ ‫دسترسی‬ ‫این‬ ‫از‬ ‫مستقیم‬ API ‫پایگاه‬ ‫در‬ ‫‌راحتی‬ ‫ه‬‫ب‬ ‫را‬ ‫خارجی‬ ‫‌های‬ ‫ه‬‫داد‬ ‫که‬ ‫‌دهد‬ ‫ی‬‫م‬ ‫را‬ ‫امکان‬ ‫این‬ ‫شما‬ ‫به‬ ‫ویژگی‬ ‫این‬ .‫آورید‬ ‫‌دست‬ ‫ه‬‫ب‬ ‫ها‬ .‫کنید‬ ‫ادغام‬ ‫خود‬ ‫داده‬ 3 . ‫داده‬ ‫مختلف‬ ‫‌های‬ ‫ت‬‫فرم‬ ‫از‬ ‫پشتیبانی‬ : • CONNECT Engine ‫مانند‬ ‫داده‬ ‫مختلف‬ ‫‌های‬ ‫ت‬‫فرم‬ ‫از‬ JSON، CSV ‫و‬ ، XML ‫شما‬ ‫به‬ ‫این‬ .‫‌کند‬ ‫ی‬‫م‬ ‫پشتیبانی‬ .‫کنید‬ ‫بارگذاری‬ ‫مختلف‬ ‫منابع‬ ‫از‬ ‫‌راحتی‬ ‫ه‬‫ب‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫که‬ ‫‌دهد‬ ‫ی‬‫م‬ ‫را‬ ‫امکان‬ ‫این‬ 4 . ‫مجازی‬ ‫جداول‬ ‫ایجاد‬ : • ‫در‬ ‫عادی‬ ‫‌صورت‬ ‫ه‬‫ب‬ ‫جداول‬ ‫این‬ .‫‌کنند‬ ‫ی‬‫م‬ ‫اشاره‬ ‫خارجی‬ ‫داده‬ ‫منابع‬ ‫به‬ ‫که‬ ‫کنید‬ ‫ایجاد‬ ‫مجازی‬ ‫جداول‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫شما‬ SQL .‫کنید‬ ‫استفاده‬ ‫خود‬ ‫‌های‬ ‫ی‬‫کوئر‬ ‫در‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫از‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫و‬ ‫هستند‬ ‫‌وجو‬ ‫س‬‫پر‬ ‫قابل‬ 5 . ‫‌ها‬ ‫ه‬‫داد‬ ‫ادغام‬ : • ‫از‬ ‫استفاده‬ ‫با‬ CONNECT Engine ‫یک‬ ‫در‬ ‫یکپارچه‬ ‫‌صورت‬ ‫ه‬‫ب‬ ‫و‬ ‫کنید‬ ‫ادغام‬ ‫مختلف‬ ‫منابع‬ ‫از‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ ، .‫است‬ ‫مفید‬ ‫‌گیری‬ ‫ش‬‫گزار‬ ‫و‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫تحلیل‬ ‫برای‬ ‫‌ویژه‬ ‫ه‬‫ب‬ ‫ویژگی‬ ‫این‬ .‫کنید‬ ‫کار‬ ‫داده‬ ‫پایگاه‬ 6 . ‫هویت‬ ‫احراز‬ ‫از‬ ‫پشتیبانی‬ : • ،‫دارند‬ ‫هویت‬ ‫احراز‬ ‫به‬ ‫نیاز‬ ‫دارید‬ ‫دسترسی‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫به‬ ‫که‬ ‫‌ای‬ ‫ه‬‫داد‬ ‫منابع‬ ‫اگر‬ CONNECT Engine ‫شما‬ ‫به‬ ‫را‬ ‫امکان‬ ‫این‬ .‫کنید‬ ‫وارد‬ ‫جدول‬ ‫تعریف‬ ‫در‬ ‫را‬ ‫هویت‬ ‫احراز‬ ‫اطالعات‬ ‫که‬ ‫‌دهد‬ ‫ی‬‫م‬ ‫کاربردها‬ ‫از‬ ‫‌هایی‬ ‫ل‬‫مثا‬ • ‫خارجی‬ ‫‌های‬ ‫ه‬‫داد‬ ‫تحلیل‬ ‫از‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ : API ‫و‬ ‫تحلیل‬ ‫برای‬ ‫داده‬ ‫پایگاه‬ ‫یک‬ ‫در‬ ‫را‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫و‬ ‫کرده‬ ‫‌آوری‬ ‫ع‬‫جم‬ ‫مختلف‬ ‫های‬ .‫کنید‬ ‫ذخیره‬ ‫‌گیری‬ ‫ش‬‫گزار‬ • ‫منبع‬ ‫چندین‬ ‫از‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫ادغام‬ ‫از‬ ‫‌توانید‬ ‫ی‬‫م‬ ،‫دارند‬ ‫قرار‬ ‫مختلف‬ ‫فرمت‬ ‫یا‬ ‫داده‬ ‫پایگاه‬ ‫چندین‬ ‫در‬ ‫شما‬ ‫‌های‬ ‫ه‬‫داد‬ ‫اگر‬ : CONNECT Engine .‫کنید‬ ‫استفاده‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫ادغام‬ ‫برای‬
  • 17.
    • ‫تاریخی‬ ‫‌های‬ ‫ه‬‫داد‬ ‫به‬‫دسترسی‬ ‫‌های‬ ‫ل‬‫فای‬ ‫از‬ ‫را‬ ‫تاریخی‬ ‫‌های‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ : CSV ‫یا‬ JSON ‫پایگاه‬ ‫در‬ ‫را‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫و‬ ‫کرده‬ ‫بارگذاری‬ .‫کنید‬ ‫ذخیره‬ ‫خود‬ ‫داده‬ ‫‌سازی‬ ‫ه‬‫پیاد‬ ‫از‬ ‫مثال‬ ‫چند‬ ‫اینجا‬ ‫در‬ MariaDB CONNECT Engine :‫است‬ ‫شده‬ ‫آورده‬ ‫مختلف‬ ‫داده‬ ‫منابع‬ ‫به‬ ‫دسترسی‬ ‫برای‬ ‫مثال‬ 1 ‫فایل‬ ‫یک‬ ‫به‬ ‫دسترسی‬ : CSV ‫فایل‬ ‫یک‬ ‫شما‬ ‫کنید‬ ‫فرض‬ CSV ‫نام‬ ‫به‬ . data csv :‫است‬ ‫زیر‬ ‫اطالعات‬ ‫شامل‬ ‫که‬ ‫دارید‬ id,name,value 1,Item1,100 2,Item2,200 3,Item3,300 ‫فایل‬ ‫این‬ ‫به‬ ‫دسترسی‬ ‫برای‬ CSV :‫کنید‬ ‫ایجاد‬ ‫را‬ ‫زیر‬ ‫جدول‬ ‫‌توانید‬ ‫ی‬‫م‬ ، CREATE TABLE csv_data ( id INT, name VARCHAR(255), value INT ) ENGINE=CONNECT TABLE_TYPE=CSV URI='/path/to/data.csv'; :‫کنید‬ ‫انتخاب‬ ‫ساده‬ ‫کوئری‬ ‫یک‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫سپس‬ SELECT * FROM csv_data; ‫مثال‬ 2 ‫یک‬ ‫به‬ ‫دسترسی‬ : API REST ‫یک‬ ‫شما‬ ‫کنید‬ ‫فرض‬ API REST ‫‌صورت‬ ‫ه‬‫ب‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫که‬ ‫دارید‬ JSON ،‫مثال‬ ‫برای‬ .‫‌دهد‬ ‫ی‬‫م‬ ‫ارائه‬ API ‫آدرس‬ ‫به‬ ‫شما‬ :// . . / http api example com data ‫این‬ ‫به‬ ‫دسترسی‬ ‫برای‬ .‫‌دهد‬ ‫ی‬‫م‬ ‫پاسخ‬ API :‫کنید‬ ‫ایجاد‬ ‫را‬ ‫زیر‬ ‫جدول‬ ‫‌توانید‬ ‫ی‬‫م‬ ، CREATE TABLE api_data ( id INT, name VARCHAR(255), value INT ) ENGINE=CONNECT TABLE_TYPE=REST URI='http://api.example.com/data' FORMAT='JSON';
  • 18.
    :‫کنید‬ ‫انتخاب‬ ‫زیر‬‫کوئری‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫سپس‬ SELECT * FROM api_data; ‫مثال‬ 3 ‫یک‬ ‫به‬ ‫داده‬ ‫ارسال‬ : API ‫از‬ ‫استفاده‬ ‫با‬ POST ‫یک‬ ‫به‬ ‫را‬ ‫‌ای‬ ‫ه‬‫داد‬ ‫بخواهید‬ ‫اگر‬ API ‫روش‬ ‫از‬ ‫‌توانید‬ ‫ی‬‫م‬ ،‫کنید‬ ‫ارسال‬ POST ‫کنید‬ ‫فرض‬ .‫کنید‬ ‫استفاده‬ API ‫آدرس‬ ‫به‬ ‫شما‬ :// . . / http api example com data :‫کنید‬ ‫ایجاد‬ ‫را‬ ‫زیر‬ ‫جدول‬ ‫‌توانید‬ ‫ی‬‫م‬ .‫کنید‬ ‫ارسال‬ ‫آن‬ ‫به‬ ‫را‬ ‫‌ای‬ ‫ه‬‫داد‬ ‫‌خواهید‬ ‫ی‬‫م‬ ‫شما‬ ‫و‬ ‫‌دهد‬ ‫ی‬‫م‬ ‫پاسخ‬ CREATE TABLE api_post ( response VARCHAR(255) ) ENGINE=CONNECT TABLE_TYPE=REST URI='http://api.example.com/data' FORMAT='JSON' HTTP_METHOD='POST' HTTP_BODY='{"key1":"value1", "key2":"value2"}'; :‫کنید‬ ‫ارسال‬ ‫زیر‬ ‫کوئری‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫سپس‬ INSERT INTO api_post VALUES (NULL); ‫مثال‬ 4 ‫داده‬ ‫پایگاه‬ ‫یک‬ ‫به‬ ‫دسترسی‬ : MySQL ‫دیگر‬ ‫داده‬ ‫پایگاه‬ ‫یک‬ ‫به‬ ‫بخواهید‬ ‫اگر‬ MySQL ‫از‬ ‫‌توانید‬ ‫ی‬‫م‬ ،‫کنید‬ ‫پیدا‬ ‫دسترسی‬ ‫دیگر‬ CONNECT Engine ‫کنید‬ ‫فرض‬ .‫کنید‬ ‫استفاده‬ ‫داده‬ ‫پایگاه‬ ‫یک‬ ‫شما‬ MySQL ‫نام‬ ‫به‬ remote_db ‫جدول‬ ‫به‬ ‫‌خواهید‬ ‫ی‬‫م‬ ‫و‬ ‫دارید‬ users ‫زیر‬ ‫جدول‬ ‫‌توانید‬ ‫ی‬‫م‬ .‫کنید‬ ‫پیدا‬ ‫دسترسی‬ ‫آن‬ :‫کنید‬ ‫ایجاد‬ ‫را‬ CREATE TABLE remote_users ( id INT, username VARCHAR(255), email VARCHAR(255) ) ENGINE=CONNECT TABLE_TYPE=MYSQL URI='mysql://username:password@remote_host:3306/remote_db/users'; :‫کنید‬ ‫انتخاب‬ ‫زیر‬ ‫کوئری‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫سپس‬ SELECT * FROM remote_users;
  • 19.
  • 20.
    CONNECT Engine ‫این‬ ‫اگرچه‬.‫بخوانید‬ ‫وب‬ ‫منابع‬ ‫حتی‬ ‫و‬ ،‫خارجی‬ ‫جداول‬ ،‫‌ها‬ ‫ل‬‫فای‬ ‫از‬ ‫مستقیمًا‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫‌دهد‬ ‫ی‬‫م‬ ‫اجازه‬ ‫شما‬ ‫به‬ .‫باشد‬ ‫مفید‬ ‫‌تواند‬ ‫ی‬‫م‬ ‫ساده‬ ‫سناریوهای‬ ‫برای‬ ،‫دارد‬ ‫‌هایی‬ ‫ت‬‫محدودی‬ ‫رویکرد‬ ‫از‬ ‫چگونه‬ CONNECT Engine ‫برای‬ API ‫کنیم؟‬ ‫استفاده‬ ،‫روش‬ ‫این‬ ‫در‬ CONNECT Engine ‫‌های‬ ‫ه‬‫داد‬ API ‫‌های‬ ‫ی‬‫کوئر‬ ‫طریق‬ ‫از‬ ‫را‬ SQL ‫‌های‬ ‫ن‬‫زبا‬ ‫از‬ ‫استفاده‬ ‫به‬ ‫نیازی‬ ‫و‬ ‫‌کند‬ ‫ی‬‫م‬ ‫فراخوانی‬ ‫مانند‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ PHP ‫یا‬ Python .‫نیست‬ ‫ساخت‬ :‫مثال‬ API ‫با‬ ‫ساده‬ CONNECT Engine ‫فایل‬ ‫یک‬ ‫طریق‬ ‫از‬ ‫را‬ ‫جدول‬ ‫یک‬ ‫‌های‬ ‫ه‬‫داد‬ ‫‌خواهیم‬ ‫ی‬‫م‬ ‫کنید‬ ‫فرض‬ JSON ‫در‬ / MariaDB MySQL .‫کنیم‬ ‫منتشر‬ :‫مراحل‬ 1 . .‫اصلی‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ 2 . ‫از‬ ‫استفاده‬ CONNECT Engine ‫به‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫نوشتن‬ ‫برای‬ JSON . 3 . ‫فایل‬ ‫ارائه‬ ‫برای‬ ‫سرور‬ ‫پیکربندی‬ JSON ‫‌عنوان‬ ‫ه‬‫ب‬ API . 1 ‫اصلی‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ . :‫کنید‬ ‫ایجاد‬ ‫نمونه‬ ‫دیتابیس‬ ‫و‬ ‫جدول‬ ‫یک‬ ‫ابتدا‬ CREATE DATABASE api_example; USE api_example; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) ); INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com');
  • 21.
    2 ‫پیکربندی‬ . CONNECT Engine ‫خروجی‬‫برای‬ JSON CONNECT Engine ‫‌های‬ ‫ل‬‫فای‬ ‫از‬ JSON ‫به‬ ‫را‬ ‫جدول‬ ‫یک‬ ‫‌های‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫شما‬ .‫‌کند‬ ‫ی‬‫م‬ ‫پشتیبانی‬ JSON ‫آن‬ ‫به‬ ‫و‬ ‫کرده‬ ‫منتقل‬ .‫باشید‬ ‫داشته‬ ‫دسترسی‬ ‫تنظیم‬ CONNECT Engine : ‫که‬ ‫شوید‬ ‫مطمئن‬ ‫ابتدا‬ CONNECT Engine :‫است‬ ‫فعال‬ SHOW ENGINES; ‫اگر‬ CONNECT ‫تنظیمات‬ ‫فایل‬ ‫در‬ ‫را‬ ‫آن‬ ،‫نیست‬ ‫فعال‬ / MySQL MariaDB :‫کنید‬ ‫فعال‬ [ ] mysqld - - = . plugin load add ha_connect so ‫سپس‬ ‫و‬ MySQL .‫کنید‬ ‫ریستارت‬ ‫را‬ ‫فایل‬ ‫یک‬ ‫ایجاد‬ JSON ‫با‬ CONNECT : ‫جدول‬ ‫یک‬ ‫‌توانید‬ ‫ی‬‫م‬ CONNECT ‫فایل‬ ‫به‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫که‬ ‫بسازید‬ JSON :‫کند‬ ‫متصل‬ CREATE TABLE users_json ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='/var/lib/mysql-files/users.json'; INSERT INTO users_json SELECT * FROM users; 3 ‫ارائه‬ . JSON ‫‌عنوان‬ ‫ه‬‫ب‬ API ‫فایل‬ ‫به‬ ‫دسترسی‬ ‫برای‬ JSON ‫طریق‬ ‫از‬ HTTP ‫مثل‬ ‫وب‬ ‫سرور‬ ‫یک‬ ‫از‬ ‫‌توانید‬ ‫ی‬‫م‬ ، Apache ‫یا‬ Nginx .‫کنید‬ ‫استفاده‬ ‫پیکربندی‬ Apache : 1 . ‫فایل‬ JSON ( ‫شده‬ ‫تولید‬ / / / - / . var lib mysql files users json :‫کنید‬ ‫منتقل‬ ‫وب‬ ‫عمومی‬ ‫دایرکتوری‬ ‫به‬ ‫را‬ ) / / / - / . / / / / mv var lib mysql files users json var www html 2 . ‫که‬ ‫شوید‬ ‫مطمئن‬ Apache :‫است‬ ‫فعال‬ ‫و‬ ‫نصب‬ systemctl start apache2
  • 22.
    3 . ‫فایل‬ ‫اکنون‬ JSON ‫مثل‬ ‫ابزارهایی‬‫یا‬ ‫مرورگر‬ ‫طریق‬ ‫از‬ curl :‫است‬ ‫دسترسی‬ ‫قابل‬ :// / . curl http localhost users json ‫از‬ ‫خواندن‬ API ‫خارجی‬ ‫‌های‬ ‫‌توانید‬ ‫ی‬‫م‬ : CONNECT Engine ‫از‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫خواندن‬ ‫برای‬ ‫را‬ API :‫کنید‬ ‫استفاده‬ ‫خارجی‬ ‫های‬ CREATE TABLE external_data = ENGINE CONNECT = TABLE_TYPE JSON = :// . . / . FILE_NAME 'https api example com data json'; 1 . ‫جدول‬ ‫از‬ ‫مستقیم‬ ‫خواندن‬ ‫کوئری‬ ‫با‬ ‫مستقیمًا‬ ‫را‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫‌توانید‬ ‫ی‬‫م‬ ،‫فایل‬ ‫به‬ ‫داده‬ ‫نوشتن‬ ‫جای‬ ‫به‬ : SQL ‫اصلی‬ ‫جدول‬ ‫روی‬ ‫‌عنوان‬ ‫ه‬‫ب‬ ‫آن‬ ‫ارائه‬ ‫برای‬ ‫ساده‬ ‫وب‬ ‫سرور‬ ‫یک‬ ‫و‬ ‫بخوانید‬ API .‫کنید‬ ‫‌اندازی‬ ‫ه‬‫را‬ :‫‌ها‬ ‫ت‬‫محدودی‬ 1 . ( ‫پیچیده‬ ‫‌های‬ ‫ت‬‫درخواس‬ ‫مدیریت‬ ‫و‬ ‫است‬ ‫مناسب‬ ‫ساده‬ ‫سناریوهای‬ ‫برای‬ ‫بیشتر‬ ‫روش‬ ‫این‬ POST، PUT، DELETE ‫را‬ ) .‫‌کند‬ ‫ی‬‫نم‬ ‫پشتیبانی‬ 2 . .‫شوند‬ ‫‌سازی‬ ‫ه‬‫پیاد‬ ‫جداگانه‬ ‫صورت‬ ‫به‬ ‫باید‬ ‫هویت‬ ‫احراز‬ ‫و‬ ‫امنیت‬ 3 . ‫(مثل‬ ‫سرور‬ ‫سمت‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ ‫زبان‬ ‫یک‬ ‫از‬ ‫استفاده‬ ،‫پیچیده‬ ‫و‬ ‫پویا‬ ‫‌های‬ ‫ه‬‫داد‬ ‫برای‬ PHP ‫یا‬ Python .‫است‬ ‫‌تر‬ ‫ب‬‫مناس‬ )
  • 23.
    ‫مثال‬ ۲ : ‫یک‬ ‫ایجاد‬ ‫برای‬ API ‫ابزار‬‫از‬ ‫استفاده‬ ‫با‬ ‫آن‬ ‫به‬ ‫دسترسی‬ ‫و‬ ‫دیتابیس‬ ‫با‬ curl ‫مثل‬ ‫‌هایی‬ ‫ک‬‫‌ور‬ ‫م‬‫فری‬ ‫از‬ ‫‌توانید‬ ‫ی‬‫م‬ ، Flask ‫(برای‬ Python ‫یا‬ ) . Express js ‫(برای‬ . Node js ‫از‬ ‫مثال‬ ‫این‬ ‫در‬ .‫کنید‬ ‫استفاده‬ ) Python ‫و‬ Flask ‫موتور‬ ‫از‬ ‫و‬ ‫‌کنیم‬ ‫ی‬‫م‬ ‫استفاده‬ / MySQL MariaDB CONNECT .‫‌بریم‬ ‫ی‬‫م‬ ‫بهره‬ ‫دیتابیس‬ ‫به‬ ‫اتصال‬ ‫برای‬ :‫کلی‬ ‫مراحل‬ 1 . .‫محیط‬ ‫تنظیم‬ ‫و‬ ‫ابزارها‬ ‫نصب‬ 2 . .‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ 3 . ‫ساخت‬ API ‫با‬ Flask . 4 . ‫تست‬ API ‫با‬ curl . 1 ‫محیط‬ ‫تنظیم‬ ‫و‬ ‫ابزارها‬ ‫نصب‬ . ‫‌ها‬ ‫ی‬‫نیازمند‬ : • 3 Python • ( Flask - - pip install flask flask mysql connector) • / MySQL MariaDB ‫سیستم‬ ‫روی‬ ‫‌شده‬ ‫ب‬‫نص‬ 2 ‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ . .‫کنید‬ ‫ایجاد‬ ‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ابتدا‬ :‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ساخت‬ CREATE DATABASE api_example; USE api_example; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) ); :‫نمونه‬ ‫‌های‬ ‫ه‬‫داد‬ ‫کردن‬ ‫اضافه‬
  • 24.
    ( , ) INSERTINTO users name email VALUES ( , . ), 'Alice' 'alice@example com' ( , . ) 'Bob' 'bob@example com' ; 3 ‫ایجاد‬ . API ‫با‬ Flask ‫یک‬ ‫اینجا‬ API ‫عملیات‬ ‫که‬ ‫‌سازیم‬ ‫ی‬‫م‬ ‫ساده‬ CRUD .‫دهد‬ ‫انجام‬ ‫دیتابیس‬ ‫روی‬ ‫را‬ )‫حذف‬ ‫و‬ ‫‌روزرسانی‬ ‫ه‬‫ب‬ ،‫خواندن‬ ،‫(ایجاد‬ ‫کد‬ Python : from flask import Flask, request, jsonify import mysql.connector app = Flask(__name__) # ‫دیتابیس‬ ‫تنظیمات‬ db_config = { 'host': 'localhost', 'user': 'root', 'password': 'your_password', 'database': 'api_example' } # : ‫کاربران‬ ‫لیست‬ ‫دریافت‬ ‫مسیر‬ @app.route('/users', methods=['GET']) def get_users(): conn = mysql.connector.connect(**db_config) cursor = conn.cursor(dictionary=True) cursor.execute("SELECT * FROM users") users = cursor.fetchall() conn.close() return jsonify(users) # : ‫جدید‬ ‫کاربر‬ ‫کردن‬ ‫اضافه‬ ‫مسیر‬ @app.route('/users', methods=['POST']) def add_user(): data = request.json conn = mysql.connector.connect(**db_config) cursor = conn.cursor() cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", (data['name'], data['email'])) conn.commit() conn.close() return jsonify({'message': 'User added successfully'}), 201 # : ‫خاص‬ ‫کاربر‬ ‫یک‬ ‫اطالعات‬ ‫دریافت‬ ‫مسیر‬ @app.route('/users/<int:user_id>', methods=['GET']) def get_user(user_id): conn = mysql.connector.connect(**db_config) cursor = conn.cursor(dictionary=True) cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,)) user = cursor.fetchone() conn.close() if user: return jsonify(user) else: return jsonify({'error': 'User not found'}), 404 # : ‫کاربر‬ ‫یک‬ ‫حذف‬ ‫مسیر‬ @app.route('/users/<int:user_id>', methods=['DELETE']) def delete_user(user_id): conn = mysql.connector.connect(**db_config) cursor = conn.cursor() cursor.execute("DELETE FROM users WHERE id = %s", (user_id,)) conn.commit() conn.close() return jsonify({'message': 'User deleted successfully'}) if __name__ == '__main__': app.run(debug=True)
  • 25.
    4 ‫تست‬ . API ‫با‬ curl 1 :‫کاربران‬ ‫لیست‬‫دریافت‬ . curl -X GET http://localhost:5000/users 2 :‫جدید‬ ‫کاربر‬ ‫کردن‬ ‫اضافه‬ . curl -X POST http://localhost:5000/users -H "Content-Type: application/json" -d '{"name": "Charlie", "email": "charlie@example.com"}' 3 :‫خاص‬ ‫کاربر‬ ‫یک‬ ‫اطالعات‬ ‫دریافت‬ . curl -X GET http://localhost:5000/users/1 4 :‫کاربر‬ ‫حذف‬ . curl -X DELETE http://localhost:5000/users/1 :‫توضیحات‬ • Flask ‫ساخت‬ ‫برای‬ ‫سبک‬ ‫‌ورک‬ ‫م‬‫فری‬ : API . • . mysql connector .‫دیتابیس‬ ‫با‬ ‫ارتباط‬ ‫برای‬ : • CONNECT Engine ‫از‬ ‫استفاده‬ : / MySQL MariaDB .‫مستقیم‬ ‫اتصال‬ ‫برای‬ ‫از‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫بزرگتر‬ ‫‌های‬ ‫ه‬‫پروژ‬ ‫برای‬ .‫بود‬ ‫ساده‬ ‫مثال‬ ‫یک‬ ‫این‬ ORM ‫مثل‬ ‫هایی‬ SQLAlchemy .‫کنید‬ ‫استفاده‬
  • 26.
    ‫مثال‬ ۳ : ‫ایجاد‬ ‫برای‬ API ‫با‬ PHP ‫دیتابیس‬ ‫و‬ MySQL ‫از‬‫‌توان‬ ‫ی‬‫م‬ ، PHP ‫مثل‬ ‫‌هایی‬ ‫ک‬‫‌ور‬ ‫م‬‫فری‬ ‫یا‬ ‫خام‬ Laravel ‫از‬ ‫اینجا‬ ‫در‬ .‫کرد‬ ‫استفاده‬ PHP ‫یک‬ ‫ایجاد‬ ‫برای‬ ‫خام‬ API ‫عملیات‬ ‫که‬ ‫‌کنیم‬ ‫ی‬‫م‬ ‫استفاده‬ ‫ساده‬ CRUD ‫با‬ ‫و‬ ‫‌دهد‬ ‫ی‬‫م‬ ‫انجام‬ ‫را‬ )‫حذف‬ ‫و‬ ‫‌روزرسانی‬ ‫ه‬‫ب‬ ،‫خواندن‬ ،‫(ایجاد‬ curl .‫است‬ ‫دسترسی‬ ‫قابل‬ :‫کلی‬ ‫مراحل‬ 1 . ‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ . 2 . ‫فایل‬ ‫ایجاد‬ API ‫با‬ PHP . 3 . ‫تست‬ API ‫با‬ curl . 1 ‫نمونه‬ ‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ایجاد‬ . SQL :‫جدول‬ ‫و‬ ‫دیتابیس‬ ‫ساخت‬ ‫برای‬ CREATE DATABASE api_example; USE api_example; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) ); INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com'); 2 ‫فایل‬ ‫ایجاد‬ . API ‫با‬ PHP :‫فایل‬ . api php <?php header("Content-Type: application/json"); header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Methods, Authorization"); $servername = "localhost"; $username = "root"; $password = "your_password"; $dbname = "api_example"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die(json_encode(["error" => "Database connection failed: " . $conn->connect_error])); } // Method detection $method = $_SERVER['REQUEST_METHOD']; $path = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
  • 27.
    $resource = $path[0]?? null; $id = $path[1] ?? null; // Routes if ($resource === 'users') { switch ($method) { case 'GET': if ($id) { // Get a specific user $stmt = $conn->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $id); $stmt->execute(); $result = $stmt->get_result(); $user = $result->fetch_assoc(); echo json_encode($user ?: ["error" => "User not found"]); } else { // Get all users $result = $conn->query("SELECT * FROM users"); $users = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($users); } break; case 'POST': // Create a new user $data = json_decode(file_get_contents("php://input"), true); if (isset($data['name'], $data['email'])) { $stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)"); $stmt->bind_param("ss", $data['name'], $data['email']); $stmt->execute(); echo json_encode(["message" => "User created successfully", "id" => $conn->insert_id]); } else { echo json_encode(["error" => "Invalid input"]); } break; case 'DELETE': // Delete a user if ($id) { $stmt = $conn->prepare("DELETE FROM users WHERE id = ?"); $stmt->bind_param("i", $id); $stmt->execute(); echo json_encode(["message" => "User deleted successfully"]); } else { echo json_encode(["error" => "User ID not provided"]); } break; default: echo json_encode(["error" => "Unsupported HTTP method"]); break; } } else { echo json_encode(["error" => "Invalid endpoint"]); } $conn->close(); ?> 3 ‫تست‬ . API ‫با‬ curl 1 :‫کاربران‬ ‫همه‬ ‫دریافت‬ . curl -X GET http://localhost/api.php/users 2 :‫خاص‬ ‫کاربر‬ ‫یک‬ ‫دریافت‬ . curl -X GET http://localhost/api.php/users/1 3 :‫جدید‬ ‫کاربر‬ ‫کردن‬ ‫اضافه‬ . curl -X POST http://localhost/api.php/users -H "Content-Type: application/json"
  • 28.
    -d '{"name": "Charlie","email": "charlie@example.com"}' 4 :‫کاربر‬ ‫حذف‬ . curl -X DELETE http://localhost/api.php/users/1 :‫توضیحات‬ 1 . ‫دیتابیس‬ ‫اتصال‬ ‫از‬ : mysqli ‫با‬ ‫ارتباط‬ ‫برای‬ MySQL .‫است‬ ‫شده‬ ‫استفاده‬ 2 . ‫‌ها‬ ‫ه‬‫داد‬ ‫دریافت‬ ‫از‬ : :// php input ‫ورودی‬ ‫دریافت‬ ‫برای‬ JSON .‫است‬ ‫شده‬ ‫استفاده‬ 3 . ‫امنیت‬ ‫پارامترهای‬ ‫طریق‬ ‫از‬ ‫‌ها‬ ‫ه‬‫داد‬ : bind ‫از‬ ‫تا‬ ‫‌شوند‬ ‫ی‬‫م‬ ‫ارسال‬ ‫دیتابیس‬ ‫به‬ ‫‌ها‬ ‫ی‬‫کوئر‬ ‫در‬ ‫شده‬ SQL Injection ‫جلوگیری‬ .‫شود‬ 4 . ‫هدرها‬ ‫تنظیم‬ ‫از‬ ‫پشتیبانی‬ ‫برای‬ ‫هدرها‬ : CORS ‫و‬ JSON .‫‌اند‬ ‫ه‬‫شد‬ ‫تنظیم‬ ‫یا‬ ،‫خطاها‬ ‫مدیریت‬ ،‫ورودی‬ ‫اعتبارسنجی‬ ‫مانند‬ ،‫کنید‬ ‫اضافه‬ ‫آن‬ ‫به‬ ‫بیشتری‬ ‫عملکردهای‬ ‫‌توانید‬ ‫ی‬‫م‬ ‫و‬ ‫است‬ ‫گسترش‬ ‫قابل‬ ‫راحتی‬ ‫به‬ ‫نمونه‬ ‫این‬ .‫کاربران‬ ‫هویت‬ ‫احراز‬