first step
266
0-JWT and PHP/JWT_and_Php.md
Normal file
|
@ -0,0 +1,266 @@
|
|||
<div align="justify" dir="rtl">
|
||||
|
||||
<p align="center" dir="rtl">بسم الله الرحمن الرحیم</p>
|
||||
|
||||
# آموزش JWT در PHP
|
||||
|
||||
## آموزش JWT در PHP مقدمه
|
||||
|
||||
وقتی سایتهای مختلف را بررسی میکنیم شاهد این هستیم که اکثر آنها درحال استفاده از JSON میباشند که اهمیت JSON و تبادل اطلاعات با آن را متوجه میشویم اما یکی از نقشهای مهم JSON را میتوان در JWT اشاره کرد که خیلی از وبسایتها را یک پله از مابقی وبسایتها جلوتر انداخته است، حال سوال پیش میآید که JWT چیست و چه کاربردی دارد؟
|
||||
PHP - JWT - JSON
|
||||
|
||||
## JWT چیست؟
|
||||
|
||||
JWT به اختصار رسیده سه کلمهی JSON Web Token است، (Open Standard (RFC 7519 است، به این معنا که هرکسی میتواند از آن استفاده کند، و میتوان بین سرور (Server) و کلاینت (Client) و یا سرور به سرور اطلاعات مورد نظر را با خیال راحت انتقال داد.
|
||||
|
||||
JWT برای چه استفاده میشود؟ اطلاعات تایید شده و قابل اعتماد هستند، و از همه مهمتر فشرده بودن یا جمع و جور بودن دادهها است، به این معنا که میتوان JWT را از طریق URLها، درخواستهای POST و HTTP Headerها ارسال کرد، فشرده بودن دادهها باعث میشود، تا سرعت انتقال نیز بالا باشد.
|
||||
|
||||
از دیگر ویژگیهای JWT میتوان به خوددار بودن آن اشاره کرد، یعنی اطلاعات کاربر را در خودش دارد و از کوئری (Query) زدنهای بیهوده به پایگاهداده جلوگیری میکند. برای مثال تصور کنید که یک کاربر در روز چند بار به وبسایت شما مراجعه میکند اگر از JWT استفاده نکنید شما باید هر بار یک کوئری به پایگاه داده بزنید تا بررسی کنید آیا این کاربر عضو وبسایت شما هست یا آیا از قبل لاگین بوده است. ولی وقتی از JWT استفاده میکنید فقط کافیست توکن (Token) کاربر را بررسی کنید در ادامه دربارهی توکنها هم توضیح میدهیم.
|
||||
|
||||
JWT برای مجوزهای دسترسی (Authorization) استفاده میشود نه برای اعتبارسنجی (Authentication) این دو کاملا معنی و مفهوم متفاوتی دارند، حال باید به توضیحات این دو مورد بپردازیم.
|
||||
|
||||
## اعتبارسنجی یا Authentication
|
||||
|
||||
عمل اعتبارسنجی زمانی استفاده میشود که شما میخواهید دادهای که از سمت سرور میآید را اعتبارسنجی کنید که این پروسه در فرمهای صفحات وب خیلی مورد استفاده قرار میگیرد. برای مثل شما نام کاربری و رمز عبور و ایمیل یک کاربر را موقع ثبت نام دریافت میکنید و آن را بررسی میکنید که آیا از ساختار درستی برخوردار است؟ یا آیا اطلاعات ورودی میتوانند مخرب باشند؟
|
||||
|
||||
## مجوزهای دسترسی Authorization
|
||||
|
||||
Authorization یک پروسه برای دسترسی دادن به انواع مختلف کاربران یا برای دسترسی دادن برای انجام کاری است، برای مثال شما یک وبسایت دارید که درون آن کاربرانی با عنوان مدیر، فروشنده، نویسنده و ... وجود دارد و شما به انواع این کاربران دسترسیهای مختلف میدهید تا کارهای مربوط به خودشان را انجام دهند، به این معنا که دسترسیهای مدیر را نویسنده و یا فروشنده ندارد.
|
||||
ساختار JSON Web Token چگونه است؟
|
||||
ساختار JWT به سه بخش تقسیم میشود که با . (dot) از هم جدا میشوند:
|
||||
|
||||
- Header
|
||||
- Payload
|
||||
- Signature
|
||||
|
||||
و ساختاری شبیه به xxxxx.yyyyy.zzzzz
|
||||
|
||||
## Header چیست؟
|
||||
|
||||
Header از دو بخش تشکیل شده است که بخش اول الگوریتم آن را تعیین میکند و بخش دوم نوع آن را مشخص میکند، که طبیعتاََ JWT است.
|
||||
|
||||
این ساختار JSON با Base64Url رمز گذاری شده است تا به بخش اول آن شکل بدهد، منظور از بخش اول xxxxx.yyyyy.zzzzz است.
|
||||
برای مثال:
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
|
||||
{
|
||||
"alg": "HS256",
|
||||
"typ": "JWT"
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
الگوریتمهای Header میتوانند HMAC SHA256 یا RSA باشند. PHP - JWT - header - Pyalod - Signature
|
||||
الگوریتم HMAC SHA256
|
||||
|
||||
<p align="center">
|
||||
<img src="img/1.jpg" />
|
||||
</p>
|
||||
|
||||
HMAC SHA256 الگوریتم هش کلیددار است که از هش SHA-256 ساخته شده است که مبتنی بر کد احراز هویت میباشد، فرایند کار اینگونه است که HMAC یک کلید مخفی را با دادههای پیام مخلوط میکند و نتیجه را با تابع هش، هش میکند، مقدار هش را دوباره با کلید مخفی مخلوط میکند و بار دیگر تابع هش را اعمال میکند و پس از خروجی، هش 256 بیت است.
|
||||
|
||||
از HMAC میتوان برای بررسی پیام ارسال شده استفاده کرد، بدین صورت که آیا از طریق کانالی ناامن دستکاری شده است، در صورتیکه فرستنده و گیرنده یک کلید مخفی را به اشتراک میگذارند، فرستنده مقدار هش را برای دادههای اصلی محاسبه میکند و دادهی اصلی و هم مقدار هش را به عنوان یک پیام واحد ارسال میکند. گیرنده از پیام دریافتی مقدار هش را دوباره محاسبه میکند و بررسی میکند HMAC محاسبه شده با HMAC منتقل شده مطابقت دارد یا خیر، و لازم به ذکر است که هرگونه تغییر در هش یا داده باعث عدم تطابق میشود.
|
||||
|
||||
## الگوریتم RSA
|
||||
|
||||
RSA الگوریتم رمزنگاری نامتقارن است. نامتقارن در حقیقت به این معنی است که روی دو کلید مختلف یعنی کلید عمومی و کلید خصوصی کار میکند. همانطور که از نام پیداست کلید عمومی به همه داده میشود و کلید خصوصی در آن خصوصی نگه داشته میشود. برای مثال:
|
||||
|
||||
کاربر به یک سرور یک کلید عمومی ارسال میکند و یک سری داده درخواست میکند.
|
||||
سرور دیتا درخواست شده را با کلید عمومی رمزنگاری میکند و داده رمزنگاری شده را ارسال میکند.
|
||||
کاربر آن دیتا را دریافت میکند و آن را با کلید خصوصی رمزگشایی میکند.
|
||||
|
||||
از آنجایی که این رمزنگاری نامتقارن است کسی غیر از کاربر نمیتواند دادهها را دریافت کند و رمزگشایی کند حتی اگر فرد سومی کلید عمومی را داشته باشد.
|
||||
|
||||
## Payload چیست؟
|
||||
|
||||
بخش دوم xxxxx.yyyyy.zzzzz) Token) را Payload تشکیل میدهد و شامل یک سری اطلاعات دربارهی کاربر و یک سری دادههای اضافیاند، که استفاده از آنها خیلی رایج است. Payloadها میتوانند ساختاری شبیه به زیر داشته باشند.
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
|
||||
{
|
||||
"sub": "1234567890",
|
||||
"name": "John Doe",
|
||||
"admin": true
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
همانطور که در کدهای بالا آوردهایم یک کلید به اسم sub داریم و یکسری اعداد در مقابل آن است که در اینجا میتوانند به عنوان آیدی (id) کاربر استفاده شود، روبهروی کلید name مقدار نام کاربر قرار میگیرد و در کلید بعدی admin بودن و یا نبودن کاربر را مشخص میشود. پس متوجه شدیم که این بخش شامل اطلاعات کاربرها است.
|
||||
## Signature چیست؟
|
||||
|
||||
آخرین و مهمترین بخش JWTها Signature است، در حقیقت Signature تایید میکند که آیا دادهای که از سمت کاربر برگشته است بهم ریخته و یا دستکاری شده است؟
|
||||
|
||||
الگوریتمی که ما برای رمزنگاری در Header دادهایم را میگیرد، header و Payload را ترکیب میکند و آنها را دوباره رمزنگاری میکند و بار دیگر با کلیدی که به Signature داده ایم رمزنگاری میکند و اگر کسی مقدار رمزگذاری شده را تغییر دهد خطایی دریافت میکنیم که به ما نشان میدهد Signature معتبر نمیباشد.
|
||||
Signatureها نیز ساختاری شبیه به زیر دارند.
|
||||
|
||||
HMACSHA256(
|
||||
base64UrlEncode(header) + "." +
|
||||
base64UrlEncode(payload),
|
||||
secret)
|
||||
|
||||
و در نهایت خروجی رمزگذاری و تمام اینها با یکدیگر به شکل زیر میباشد. PHP - JWT - Header - Pyload - Signature
|
||||
|
||||
<p align="center">
|
||||
<img src="img/2.jpg" />
|
||||
</p>
|
||||
|
||||
## مقایسه JWT با Sessionها
|
||||
|
||||
برای درک بهتر تفاوت بین Session و JWT این دو را با مثال مقایسه میکنیم.
|
||||
|
||||
Session
|
||||
|
||||
شما به عنوان یک کاربر در یک سایتی لاگین میکنید و اطلاعات وارد شده شما به سمت سرور میرود، ایمیل و رمزعبور شما در Session ذخیره میشود و آیدی Session شما به عنوان Cookie برمیگردد، دفعه بعد که شما وارد آن سایت بشوید حالا آیدی Session شما به سمت سرور ارسال میشود و سرور با آیدی، شما را تایید میکند و پاسخ به شما برمیگردد. پس در Sessionها همه چیز به سرور بستگی دارد.
|
||||
|
||||
JWT
|
||||
|
||||
در JWT هم شما به عنوان یک کاربر وارد یک سایت میشوید و لاگین میکنید، اطلاعات وارد شده شما به سمت سرور میرود و یک JWT با رمز برای شما ساخته میشود و JWT ساخته شده به سمت مرورگر شما ارسال میشود، دفعه بعد که شما وارد سایت بشوید یک درخواست از مرورگر با JWT به سمت سرور میرود و JWT با Signature تایید میشود و مشخصات کاربر از JWT گرفته میشود سپس پاسخ به سمت مرورگر ارسال میشود.
|
||||
در JWT همه چیز سوار بر مروگر شما میباشد نه سرور، پس مزیت این کار کجاست؟
|
||||
|
||||
## کاربرد JSON Web Token
|
||||
|
||||
فرض کنید که شما به یکی از وبسایتهای بانکی مراجعه کردهاید و مشخصات خودتان را وارد کردهاید و لاگین شدهاید و وقتی دارید کارهای بانکی خودتان روی یکی از سرورها انجام میدهید، سایت تصمیم میگیرد که شما را به یکیدیگر از سرورها منتقل کند به دلیل اینکه به سمت سرور کنونی درخواستهای زیادی آمده است و بدون اینکه اتفاقی برای اطلاعات شما پیش بیاید شما منتقل میشوید و کارهای خودتان را انجام میدهید.
|
||||
|
||||
در اینجا از JSON Web Token استفاده شده است چون اطلاعات شما در مروگرتان با JWT ذخیره شده است و نیازی نیست که دوباره در سرور جدید لاگین کنید ولی اگر از Sessionها استفاده میشد شما مجبور بودید که دوباره اطلاعات خود را وارد کنید تا به انجام ادامهی کار خود بپردازید.
|
||||
ساخت JSON Web Token در PHP
|
||||
تا اینجای مقاله ما به درکی از JWT رسیدیم و فهمیدیم که چهگونه کار میکند و در چه جاهایی مورد استفاده قرار میگیرد. حال باید یک نمونه از آن را در PHP بسازیم.
|
||||
چگونه Header و Payload بسازیم؟
|
||||
|
||||
همانطور که میدانید باید Header و Payload را در ساختار JSON دربیاوریم، برای این کار لازم است اول آنها را به صورت آرایه بنویسیم و بعد به ساختار JSON تبدیل کنیم.
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
$header = json_encode(['alg' => 'HS256', 'typ' => 'JWT']);
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
در کد بالا ما یک ساختار آرایه آوردهایم و همانطور که در بالا هم اشاره شد دارای دو کلید به نامهای typ که نوع آن را مشخص میکند و alg که الگوریتم را مشخص میکند، حال آرایه را به JSON با تابع json_encode تبدیل کردهایم و آن را در متغیری با نام header ذخیره کردهایم.
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
$payload = json_encode(['user_id' => 123, 'first_name' => 'Amir', 'last_name' => 'Salehi', 'age' => 18]);
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
در کد بالا نیز ما مقادیر Payload خود را در ساختار آرایه آوردیم و آن را به JSON با تابع ()json*encode تبدیل کردهایم و در متغیری با نام Payload نگه داشتهایم.
|
||||
ساخت رشته Base64Url برای Header و Payload
|
||||
در این قدم ما Header و Payload را به رشته Base64Url رمزنگاری خواهیم کرد اما در PHP ما تابع مخصوصی برای این کار نداریم. یک تابع به اسم ()base64 وجود دارد که با base64Url یک سری تفاوتهایی دارد و ما مجبوریم که تغییراتی ایجاد کنیم، برای مثال + ، / و = را با - ، * و رشته خالی (" ") جایگذاری میکنیم.
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
$base64UrlHeader = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($header));
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
در کد بالا جایگذاریها انجام شده و متغیر header با تابع ()base64_encode رمزنگاری شده است و در متغیر base64UrlHeader ریخته شده است، این متغیر شامل مقدار زیر است.
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
و این کار را برای متغیر Payload نیز تکرار میکنیم.
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
$base64UrlPayload = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($payload));
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
اکنون متغیر base64UrlPayload حاوی مقدار زیر است.
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
eyJ1c2VyX2lkIjoxMjMsImZpcnN0X25hbWUiOiJBbWlyIiwibGFzdF9uYW1lIjoic2FsZWhpIiwiYWdlIjoiMTgifQ
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
## ساخت Signature
|
||||
|
||||
به مهمترین بخش رسیدیم که باید Signature را بسازیم، برای ساخت SIgnature باید از تابع ()hash_hmac و از الگوریتم sha256 استفاده کنیم، لازم به ذکر است که مقادیر درون متغیرهای base64UrlHeader و base64UrlPyload با یک . (dot) از هم دیگر جدا میشوند.
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
$signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, 'abC123!', true);
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
پارامتر اول: تابع ()hash_hmac ما باید نوع الگوریتم هش را تعیین کنیم.
|
||||
پارامتر دوم: دادهای که قرار است هش بشود را وارد میکنید.
|
||||
پارامتر سوم: یک کلید مخفی برای تولید hmac است.
|
||||
پارامتر چهارم: وقتی که مقدار true را میدهیم ، دادههای باینری را به عنوان خروجی به ما برمیگرداند و false هگزیتهای (hexit) حروف کوچک را به عنوان خروجی برمیگرداند.
|
||||
|
||||
## رمزنگاری Signature تولید شده
|
||||
|
||||
حال که Signature خود را تولید کردهایم و آن را درون متغیر signature ذخیره کردهایم باید آن را مانند header و Payload به صورت base64Url رمزنگاری کنیم.
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
$base64UrlSignature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($signature));
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
## گام نهایی ساخت JWT
|
||||
|
||||
تمامی مقادیری که ما رمزنگاری کردیم و درون متغیرها نگهداری کردیم باید به یکدیگر بچسبانیم تا مانند ساختار JWT بشود، برای این کار باید متغیرها را با . (dot) از هم جدا کنیم و درون متغیری با نام jwt بریزیم.
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
$jwt = $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature;
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
خروجی نهایی ما به این صورت است.
|
||||
|
||||
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMjN9.NYlecdiqVuRg0XkWvjFvpLvglmfR1ZT7f8HeDDEoSx8
|
||||
|
||||
این آسانترین راهی بود که میتوانستیم یک JWT بسازیم، کدهای پایین مجموعه کدهایی هست که ما در بالا نوشتهایم.
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
// Create token header as a JSON string
|
||||
$header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']);
|
||||
// Create token payload as a JSON string
|
||||
$payload = json*encode(['user_id' => 123]);
|
||||
// Encode Header to Base64Url String
|
||||
$base64UrlHeader = str_replace(['+', '/', '='], ['-', '*', ''], base64*encode($header));
|
||||
// Encode Payload to Base64Url String
|
||||
$base64UrlPayload = str_replace(['+', '/', '='], ['-', '*', ''], base64*encode($payload));
|
||||
// Create Signature Hash
|
||||
$signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, 'abC123!', true);
|
||||
// Encode Signature to Base64Url String
|
||||
$base64UrlSignature = str_replace(['+', '/', '='], ['-', '*', ''], base64_encode($signature));
|
||||
// Create JWT
|
||||
$jwt = $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature;
|
||||
echo $jwt;
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
# جمع بندی
|
||||
|
||||
تا الان فهمیدیم که JWT چیست و چه کاربردی دارد و متوجه شدیم که چقدر میتواند هم به ما و هم به کاربر کمک بسزایی داشته باشد و فهمیدیم که JWT چقدر به اطلاعات کاربر حساس است و بسیار اهمیت میدهد، از مزیتهای JWT این است که محدود به هیچ زبان برنامهنویسی نیست و شما با هر زبان برنامهنویسی که کار میکنید میتوانید آن را به کار بگیرید و از آن استفاده کنید پس برای فراگیری آن وقت بگذارید.
|
BIN
0-JWT and PHP/img/1.jpg
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
0-JWT and PHP/img/2.jpg
Normal file
After Width: | Height: | Size: 61 KiB |
192
1- The structure of MVC/1-The_tructure_of_MVC.md
Normal file
|
@ -0,0 +1,192 @@
|
|||
<div align="justify" dir="rtl">
|
||||
|
||||
<p align="center" dir="rtl">بسم الله الرحمن الرحیم</p>
|
||||
|
||||
# آشنایی با معماری MVC
|
||||
|
||||
<p align="center">
|
||||
<img src="img/0.jpg" />
|
||||
</p>
|
||||
|
||||
|
||||
## معماری MVC چیست؟
|
||||
|
||||
الگوهای طراحی متنوعی برای توسعه برنامه ها وجود دارند. در گذشته ساخت و توسعه اپلیکیشن، بخش های مختلف نظیر طراحی رابط کاربری، دریافت داده های برنامه و همچنین بخش کنترلر اپلیکیشن، در یک فایل برنامه ریزی و آماده سازی می شد. این کار معمولاً نگهداری و تعمیر برنامه را دشوار و تست اپلیکیشن را با مشکل مواجه می کرد و مقیاس پذیری برنامه های کاربردی را نیز کاهش می داد. برای حل این مشکل، یک مدل معماری به وجود آمد و به تدریج مورد استقبال قرار گرفت.
|
||||
|
||||
## خلاصه
|
||||
|
||||
* MVC یک الگوی معماری است که یک برنامه را به سه بخش مدل، نما و کنترلر تقسیم می کند.
|
||||
* مدل: شامل تمام داده ها و منطق* مربوط به آن است.
|
||||
* نما: نتیجه ارائه داده شده به کاربر یا مدیریت تعامل با کاربر است.
|
||||
* کنترلر: رابطی بین اجزای Model و View است.
|
||||
* معماری MVC اولین بار در سال 1979 توسط Trygve Reenskaug مطرح شد.
|
||||
* معماری MVC در جاوا یک فریم ورک تست پذیر، توسعه پذیر و قابل حمل است.
|
||||
* برخی از فریم ورک های محبوب MVC عبارتند از Rails، Zend Framework، CodeIgniter، Laravel، Fuel PHP و غیره.
|
||||
|
||||
MVC که مخفف Model View Controller می باشد یک الگوی معماری است که یک برنامه کاربردی را به سه جزء منطقی اصلی تقسیم می کند: مدل، نما و کنترلر. هر یک از این مؤلفه ها برای رسیدگی به جنبه های خاص توسعه یک برنامه ساخته شده اند. MVC یکی از متداول ترین فریم ورک های استاندارد توسعه وب صنعتی، برای ایجاد پروژه های مقیاس پذیر و قابل توسعه است.
|
||||
|
||||
MVC در توسعه برنامه و وب بسیار مورد استقبال قرار گرفته است و یکی از پرکاربردترین الگوهای طراحی نرم افزار برای توسعه برنامه و وب می باشد. در ادامه با معماری MVC و مزایای آن آشنا خواهید شد.
|
||||
<p align="center">
|
||||
<img src="img/1.png" />
|
||||
تصویر(۱)
|
||||
</p>
|
||||
|
||||
# MVC چیست؟
|
||||
|
||||
Model View Controller که به اختصار، MVC نامیده می شود یک الگوی طراحی است که برای توسعه برنامه های کاربردی وب ایجاد شده و دارای سه بخش اصلی است که پیشتر نیز درباره آن توضیح داده شد. الگوی قدیمی طراحی، شامل سه بخش "ورودی - فرآیند - خروجی" می شد در حالی که MVC در سه بخش "مدل - نما - کنترلر" عمل می کند. MVC در بسیاری از فریمورکها با زبانهای برنامهنویسی متعدد، مانند Python، Ruby، PHP، JavaScript و غیره استفاده می شود و معمولاً برای طراحی برنامه های کاربردی وب و برنامه های تلفن همراه از آن بهره می برند.
|
||||
<p align="center">
|
||||
<img src="img/2.png" />
|
||||
تصویر(۲)
|
||||
</p>
|
||||
|
||||
با ارائه مدل MVC، ایجاد یک برنامه، جنبه های متفاوتی را به خود می گیرد. این جنبه ها عبارتند از:
|
||||
|
||||
* منطق رابط کاربری (UI Logic)
|
||||
* منطق ورودی (Input logic)
|
||||
* منطق تجاری (Business Logic)
|
||||
|
||||
اما یک اتصال سست و نه چندان قوی بین این جنبه ها وجود دارد. بر اساس این مدل، عناصر باید در یک برنامه کاربردی موجود باشند اما نیاز نیست این اتصال قوی و مشهود باشد. منطق UI با نما یا رابط کاربری برنامه، منطق ورودی با کنترلر و در نهایت، منطق تجاری با مدل یک برنامه کاربردی سروکار دارد. این عناصر به توسعهدهندگان کمک میکنند تا هنگام ساخت هر برنامهای به پیچیدگیهای توسعه توجه کنند و به کاربران این امکان را می دهد تا در یک زمان روی یک عنصر خاص از مرحله پیاده سازی تمرکز نمایند.
|
||||
|
||||
## تاریخچه MVC
|
||||
|
||||
MVC توسط دکتر Trygve Reenskaug با زبان برنامه نویسی Smalltalk-76، درست زمانی که او از مرکز تحقیقات (Xerox Palo Alto Research Center (PARC در اواسط سال 1970 بازدید کرد، معرفی شد. بعداً این پیادهسازی در نسخههای دیگر Small-Talk نیز مورد استقبال قرار گرفت. سپس در سال 1988، مقالات "The Journal of Object Technology (JOT)" تصویر کاملی از MVC،به عنوان یک مفهوم کاملاً پذیرفته شده ارائه دادند.
|
||||
|
||||
نسخههای مختلف MVC که بعدها با نیاز به طراحی اپلیکیشن به وجود آمدند، موارد زیر هستند:
|
||||
|
||||
* (Hierarchical model-view-controller (HMVC
|
||||
* (Model-View-Presenter (MVP
|
||||
* (Model-view-adapter (MVA
|
||||
* (Model-view-viewmodel (MVVM
|
||||
|
||||
در ادامه سه جز اصلی MVC بررسی خواهد شد:
|
||||
|
||||
## Model
|
||||
|
||||
مدل به دلیل ارائه داده ها به کاربر، از اهمیت بالایی برخوردار می باشد. این قابلیت محل ذخیره داده های برنامه را مشخص می نماید. همچنین لازم به ذکر است که مدل از داده های بخش های دیگر نظیر VIEW و کنترلر اطلاعاتی در دسترس ندارد. با اعمال تغییر در مدل به صورت خودکار کاربران از ایجاد این تغییرات مطلع خواهند شد. در نظر داشته باشید مدل ممکن است یک شی واحد یا متشکل از چند شی باشد.
|
||||
|
||||
## View
|
||||
|
||||
View یا نما، یک نمایش تصویری از MVC است. نما یک رابط برای نمایش خروجی واقعی به کاربر ایجاد می کند. با این حال، یک نما به خودی خود چیزی را برای نمایش ایجاد نمی کند این کنترلر یا مدل بوده که به View می گوید، چه چیزی را نمایش دهد.
|
||||
|
||||
یک View به مدل خود متصل می شود و با پرسیدن سوالات خاصی داده های لازم برای ارائه را به دست می آورد. گاهی اوقات نیز با ارسال پیام های مناسب مدل را به روز می کند. همه این سوالات و پیام ها با اصطلاحات ساده ای به مدل ارسال می شوند که به راحتی می توانند اطلاعات ارسال شده توسط یک مدل یا یک کنترلر را درک کنند.
|
||||
|
||||
## Controller
|
||||
|
||||
کنترلر به عنوان مغز کل سیستم MVC عمل می کند. یک کنترلر همچنین به عنوان رابط بین کاربر و سیستم است و با ارائه نماهای مناسب، ورودی را در اختیار کاربر قرار داده تا آن را به طور مناسب روی صفحه نمایش دهد. برای کنترلر، خروجی کاربر قابل درک است که آن را به پیام های مناسب تبدیل خواهد نمود و همان را به view ها ارسال می کند.
|
||||
|
||||
<p align="center">
|
||||
<img src="img/3.jpg" />
|
||||
تصویر(۳)
|
||||
</p>
|
||||
|
||||
## فریم ورک های محبوب MVC
|
||||
### محبوب ترین فریم ورک های MVC عبارتند از :
|
||||
<p align="center">
|
||||
<img src="img/3-2.jpg" />
|
||||
</p>
|
||||
|
||||
## چرا با وجود اینکه FatFree جزو محبوب ترین ها نیست اما مورد استفاده قرار میگیرد:
|
||||
|
||||
* علت اینست که این فریم وورک بسیار سبک و منعطف است
|
||||
* نصب آسان و یادگیری و یادسپاری ساده آن هم مزید بر علت است.
|
||||
* در برخی از پروژه ها نیاز به همه ی قابلیت های فریم وورک نیست و برخی قابلیت ها مد نظر است مثل Ruothing ,...
|
||||
از این جهت هرچه فریم وورک کم حجمتر و سبکتر باشد ، کم هزینه تر هم خواهد بود.
|
||||
|
||||
## مزایای استفاده از MVC
|
||||
|
||||
* به طور سنتی برای رابط های کاربری گرافیکی (GUI) استفاده می شود.
|
||||
* در برنامه های کاربردی تحت وب محبوب است.
|
||||
* مسئولیت های MVC بین کاربر و سرور تقسیم می شود که با معماری برنامه های تحت وب سازگار است.
|
||||
* MVC یک الگوی طراحی مفید در هنگام برنامه ریزی و توسعه است.
|
||||
* تفکیک بخش های مرتبط: کد آن بر اساس توابع یا اجزای مدل، نما و کنترلر، دسته بندی می شود.
|
||||
* با Ruby on Rails به خوبی کار می کند.
|
||||
* وابستگی های غیر ضروری را حذف می کند.
|
||||
* بدون تغییر، مجددا قابل استفاده است.
|
||||
* MVC کلاس های مدل را بدون تغییر، مجددا قابل استفاده می کند.
|
||||
* قابلیت استفاده مجدد از کد
|
||||
* قابلیت توسعه کد
|
||||
* انسجام بالا
|
||||
* نگهداری یا تغییر آن آسان تر است.
|
||||
* پشتیبانی از چندین نما
|
||||
* هر قسمت را می توان به طور مستقل آزمایش کرد (مدل، نما، کنترلر).
|
||||
|
||||
## معایب استفاده از MVC
|
||||
|
||||
* خواندن، تغییر، تست اجزا و استفاده مجدد از این مدل مشکل است.
|
||||
* ناوبری Framework می تواند گاهی اوقات پیچیده باشد زیرا لایه های جدیدی از انتزاع را معرفی نموده که کاربران را ملزم می کند تا با معیارهای تجزیه و تحلیل MVC سازگار شوند.
|
||||
* بدون پشتیبانی رسمی
|
||||
* افزایش پیچیدگی و ناکارآمدی داده ها
|
||||
* دشواری استفاده از MVC با رابط کاربری مدرن
|
||||
* برای اجرای برنامه نویسی موازی نیاز به چندین برنامه نویس است.
|
||||
* دانش چندین فناوری نیاز است.
|
||||
* نگهداری از تعداد زیادی کد در کنترلر
|
||||
|
||||
## ۶ نکته طلایی استفاده از MVC
|
||||
|
||||
### ۱. فرآیند توسعه سریعتر:
|
||||
|
||||
MVC از توسعه سریع و موازی پشتیبانی می کند. به طور مثال اگر از یک مدل MVC برای توسعه برنامه وب استفاده شود، یک برنامه نویس می تواند روی بخش view و برنامه نویس دیگر روی کنترلر کار کند تا منطق تجاری برنامه وب را ایجاد نماید. از این رو، برنامه های توسعه یافته با استفاده از مدل MVC، می توانند سه برابر سریعتر از برنامه هایی که با استفاده از الگوهای توسعه دیگر توسعه یافته اند تکمیل شوند.
|
||||
|
||||
### ۲. امکان ارائه چندین نما (VIEW):
|
||||
|
||||
در مدل MVC می توانید چندین نما برای یک مدل ایجاد کنید. امروزه، تقاضای فزاینده ای برای دسترسی به برنامه شما از طریق راه های جدید وجود دارد و مطمئناً MVC یک راه حل عالی برای آن به شمار می رود. همچنین، در این روش تکرار کد بسیار کم اتفاق می افتد، زیرا اطلاعات و داده های تجاری را، از آنچه که به نمایش گذاشته می شود جدا می کند.
|
||||
|
||||
### ۳. پشتیبانی از تکنیک چند زمانه:
|
||||
|
||||
همچنین معماری MVC می تواند با فریم ورک جاوا اسکریپت ادغام شود. این بدان معنی است که برنامه های MVC می توانند حتی با فایل های PDF، مرورگرهای خاص سایت و ویجت های دسکتاپ کار کنند. MVC از یک تکنیک چند زمانه نیز پشتیبانی می کند که به توسعه دهندگان کمک کرده تا برنامه ای را توسعه دهند که بسیار سریع بارگذاری می شود.
|
||||
|
||||
### ۴. تغییرات بر کل مدل تأثیر نمی گذارد:
|
||||
|
||||
در هر برنامه تحت وب، رابط کاربری تمایل بیشتری به تغییر در مقابل قوانین تجاری شرکت توسعه NET. دارد. واضح است که در یک برنامه تحت وب در قسمت هایی مانند رنگ ها، فونت ها، طرح بندی صفحه نمایش و افزودن پشتیبانی دستگاه های جدید مانند تلفن های همراه یا تبلت ها، مکررا تغییرات انجام می شود. علاوه بر این، افزودن یک نوع نمای جدید در الگوی MVC بسیار آسان است زیرا بخش Model به view ها وابسته نمی باشد. بنابراین، هر گونه تغییر در مدل، کل معماری را تحت تأثیر قرار نخواهد داد.
|
||||
|
||||
### ۵. مدل MVC داده ها را بدون قالب بندی برمی گرداند:
|
||||
|
||||
الگوی MVC، داده ها را بدون هیچ تغییری در فرمت باز می گرداند. از این رو، اجزای مشابه را می توان با هر رابطی استفاده یا فراخوانی نمود. به عنوان مثال، هر نوع داده ای را می توان با HTML قالب بندی کرد، در صورتی که می توان با Macromedia Flash یا Dream viewer نیز قالب بندی را انجام داد.
|
||||
|
||||
### ۶. پلت فرم توسعه SEO:
|
||||
|
||||
پلت فرم MVC از توسعه صفحات یا برنامه های کاربردی وب، سازگار با SEO پشتیبانی می کند. با استفاده از این پلتفرم، توسعه URL های 'سئو پسند' برای ایجاد بازدیدهای بیشتر از یک برنامه خاص بسیار آسان است. این معماری معمولا در برنامه های توسعه تست محور، استفاده می شود. علاوه بر این، زبانهای اسکریپت نویسی مانند جاوا اسکریپت و jQuery را میتوان با MVC، برای توسعه برنامههای کاربردی وب ادغام کرد.
|
||||
|
||||
برنامه وب به عنوان یک MVC
|
||||
|
||||
<p align="center">
|
||||
<img src="img/4.png" />
|
||||
تصویر(۴)
|
||||
</p>
|
||||
|
||||
یک برنامه تحت وب را همانند یک طراحی MVC در نظر بگیرید. MVC از محبوبیت بالایی در برنامه های کاربری وب برخوردار می باشد و یکی از دلایل آن تقسیم مسئولیت ها بین کاربر و سرور است.
|
||||
|
||||
## تفکیک بخش های مرتبط
|
||||
|
||||
طراحی MVC، امکان جداسازی بخش های مختلف را فراهم می کند. یعنی داده ها را بین 3 بخش تقسیم نموده، به طوری که هر بخش می تواند مستقل عمل کند.
|
||||
|
||||
مدل، نما و کنترلر به یکدیگر وابسته نیستند. به طور کلی، کار نرم افزاری یک کار گروهی و تیمی می باشد. یک تیم ممکن است طراح، مهندس و معمار پایگاه داده داشته باشد. تفکیک بخش ها به این معنی است که هر یک از اعضای تیم می توانند همزمان روی بخش خود کار کنند، زیرا داده ها به بخش های مختلف تقسیم شده و تفکیک بخش ها نیز برای تعمیر و نگهداری عالی است. توسعه دهندگان می توانند بدون اینکه نیاز به بررسی سایر قطعات کد داشته باشند، اشکالی را در یک قطعه کد برطرف کنند.
|
||||
|
||||
## آزادی عمل
|
||||
|
||||
به این معنی است که هر قطعه یا بخش (مدل، نما و کنترلر)، مستقل از سایر بخش ها عمل می کند.
|
||||
|
||||
توسعه دهندگان می توانند هر یک از بخش ها را تغییر داده و دو بخش دیگر بدون نیاز به تغییر، به کار خود ادامه دهند. هنگام طراحی نرم افزار MVC، منطق هر بخش مستقل است. همه چیز در View مستقل از Model عمل می کند و در مقابل نیز، view هیچ داده ای وابسته به Model نخواهد داشت.
|
||||
|
||||
ساخت مدل ها و نماهای مستقل، سازماندهی کد را ساده و قابل درک کرده و نگهداری را آسان تر می نماید. برنامه نویسان می توانند بدون تغییر کد مدل، یک باگ در نما را برطرف کنند.
|
||||
|
||||
<p align="center">
|
||||
<img src="img/5.jpg" />
|
||||
تصویر(5)
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="img/6.png" />
|
||||
تصویر(6)
|
||||
</P>
|
||||
|
||||
تصاویر بالا نشان میدهند که وقتی کاربر روی یک دکمه کلیک میکند، از دیدگاه او در یک برنامه وب MVC، چه اتفاقی میافتد.
|
||||
|
||||
## نتیجه گیری:
|
||||
|
||||
الگوی طراحی MVC مطمئناً یک رویکرد عالی برای ساخت نرم افزاری کاربردی می باشد و همانطور که بیان شد پیاده سازی فریم ورک MVC نیز نسبتا آسان است. مزایای متعددی که در این مقاله بیان شد را نیز ارائه می دهد. پروژه هایی که با کمک مدل MVC توسعه می یابند را، می توان به راحتی، با هزینه کمتر و در مدت زمان کوتاه تری نیز توسعه داد. مهمتر از همه، قدرت آن در مدیریت multiple views (چندین نما)، MVC را به بهترین الگوی معماری برای توسعه برنامه های کاربردی وب تبدیل می کند.
|
||||
|
||||
در نتیجه، امروزه سازمان ها به دنبال توسعه NET. در برنامه های کاربردی وب بر پایه معماری MVC، جهت صرفه جویی در هزینه و زمان هستند.
|
||||
|
||||
<p align="center" dir="rtl">صلوات</p>
|
||||
</div>
|
BIN
1- The structure of MVC/img/0.jpg
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
1- The structure of MVC/img/1.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
1- The structure of MVC/img/2.png
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
1- The structure of MVC/img/3-2.jpg
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
1- The structure of MVC/img/3.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
1- The structure of MVC/img/4.png
Normal file
After Width: | Height: | Size: 143 KiB |
BIN
1- The structure of MVC/img/5.jpg
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
1- The structure of MVC/img/6.png
Normal file
After Width: | Height: | Size: 53 KiB |
110
2-The Api and postman/1-what_is_Api.md
Normal file
|
@ -0,0 +1,110 @@
|
|||
<div align="right" dir="rtl">
|
||||
|
||||
<p align="center" dir="rtl">بسم الله الرحمن الرحیم</p>
|
||||
|
||||
# معرفی API
|
||||
<p align="center">
|
||||
<img src="img/0.jpg" />
|
||||
</p>
|
||||
|
||||
# API چیست و چه کاربردهایی دارد؟
|
||||
|
||||
|
||||
احتمالاً اصطلاح “API” را شنیده اید، اما اگر می خواهید درباره این عبارت بیشتر بدانید و دانش خود را بالاتر ببرید، در ادامه با ما همراه باشید تا به زبانی ساده و همراه با مثال، این عبارت را برای شما تعریف کنیم.
|
||||
Application Programming Interface چیست؟
|
||||
|
||||
اصطلاح API مخفف عبارت Application Programming Interface به معنی “رابط برنامه نویسی نرم افزار کاربردی” است.
|
||||
|
||||
به یک ای پی آی مانند منو در رستوران فکر کنید. در این فهرست لیستی از انواع غذا های قابل سفارش را می توانید همراه با توضیحات مربوط به هر غذا مشاهده کنید.
|
||||
|
||||
وقتی مشخص می کنید کدام یک از آیتم های منو را می خواهید، کادر آشپزخانه رستوران کار را انجام می دهد و برخی از غذا های آماده را برای شما فراهم می کند. در واقع شما دقیقا نمی دانید که رستوران چگونه آن غذا را تهیه می کند و نیازی هم به آن ندارید.
|
||||
|
||||
به طور مشابه API مجموعه ای از عملیاتی را که توسعه دهندگان می توانند از آن ها استفاده کنند به همراه توضیحی از کارهایی که انجام می دهند، ذکر کرده است.
|
||||
|
||||
توسعه دهنده لزوماً نیازی به دانستن این موضوع ندارد که برای مثال یک سیستم عامل چگونه کادر گفتگوی “Save As” را ایجاد و ارائه می دهد. آن ها فقط باید بدانند که برای استفاده در برنامه آن ها چنین چیزی موجود است.
|
||||
|
||||
|
||||
|
||||
این یک استعاره کامل نیست، زیرا ممکن است توسعه دهندگان برای به دست آوردن نتایج مجبور شوند داده های خود را به API ارائه دهند. بنابراین شاید این بیشتر شبیه یک رستوران فانتزی باشد که بتوانید بعضی از مواد تشکیل دهنده خود را تهیه کنید که آشپزخانه با آن ها کار خواهد کرد.
|
||||
|
||||
API ها به توسعه دهندگان این امکان را می دهند تا با استفاده از اجرای یک پلتفرم، کار خود را با استفاده از اجرای نرم افزار سرعت بخشند. این امر کمک می کند تا میزان ایجاد کد برای توسعه دهندگان کد کم شود و همچنین به ایجاد سازگاری بیشتر در بین برنامه ها برای همان پلتفرم کمک می کند.
|
||||
|
||||
API ها می توانند دسترسی به منابع سخت افزاری و نرم افزاری را کنترل کنند.
|
||||
|
||||
## انواع API:
|
||||
|
||||
* ای پی آی خصوصی
|
||||
* ای پی آی عمومی (باز)
|
||||
* ای پی آی مشارکتی
|
||||
|
||||
# API ها زندگی را برای توسعه دهندگان آسان تر می کنند!
|
||||
<p align="center">
|
||||
<img src="img/1.jpg" />
|
||||
</p>
|
||||
Application Programming Interface API مخفف عبارت Application Programming Interface به معنی “رابط برنامه نویسی نرم افزار کاربردی” است.
|
||||
|
||||
بیایید بگوییم که شما می خواهید یک برنامه برای آیفون تهیه کنید. سیستم عامل iOS اپل تعداد زیادی API را مانند هر سیستم عامل دیگر ارائه می دهد تا این کار را برای شما آسان تر کند.
|
||||
|
||||
اگر می خواهید یک مرورگر وب را برای نشان دادن یک یا چند صفحه وب ایجاد کنید، برای برنامه خود نیازی نیست مرورگر وب خود را از ابتدا برنامه نویسی کنید. شما از API WKWebView برای جاسازی یک شیء مرورگر (WebKit (Safari در برنامه خود استفاده می کنید.
|
||||
|
||||
اگر می خواهید از دوربین آیفون عکس یا فیلم بگیرید، لازم نیست که رابط دوربین خود را بنویسید. شما از API دوربین برای تعبیه دوربین داخلی iPhone در برنامه خود استفاده می کنید.
|
||||
|
||||
اگر API ها برای آسان کردن این برنامه وجود نداشتند، توسعه دهندگان برنامه باید نرم افزار دوربین خود را می ساختند و ورودی های سخت افزار دوربین را تفسیر می کردند.
|
||||
|
||||
اما توسعه دهندگان سیستم عامل اپل این همه کار سخت را انجام داده اند تا توسعه دهندگان فقط بتوانند از API دوربین برای جاسازی دوربین استفاده کنند و سپس با ساختن برنامه خود کار خود را ادامه دهند.
|
||||
|
||||
هنگامی که اپل API دوربین را بهبود می بخشد، تمام برنامه هایی که به آن متکی هستند از این پیشرفت به طور خودکار بهره خواهند برد. این امر برای هر سیستم عاملی صدق می کند.
|
||||
# API دسترسی به منابع را کنترل می کند!
|
||||
<p align="center">
|
||||
<img src="img/2.jpg" />
|
||||
</p>
|
||||
|
||||
از API ها نیز برای کنترل دسترسی به دستگاه های سخت افزاری و عملکرد های نرم افزاری استفاده می شود که یک برنامه ممکن است لزوماً مجوز استفاده از آن ها را نداشته باشد.
|
||||
|
||||
به همین دلیل API ها اغلب نقش بزرگی در امنیت دارند.
|
||||
|
||||
به عنوان مثال اگر تاکنون از یک وب سایت بازدید کرده اید و پیامی را در مرورگر خود مشاهده کرده اید که وب سایت می خواهد مکان دقیق شما را ببیند، آن وب سایت در تلاش است تا از API جغرافیایی در مرورگر وب شما استفاده کند.
|
||||
|
||||
مرورگر های وب، API هایی مانند این را در اختیار خود قرار می دهند تا دسترسی توسعه دهندگان وب به موقعیت مکانی شما را آسان کنند.
|
||||
|
||||
آن ها فقط می توانند از شما بپرسند “کجا هستید؟” و این مرورگر است که کار سختی را برای دسترسی به GPS یا شبکه های Wi-Fi در این نزدیکی انجام می دهد تا موقعیت فیزیکی شما را پیدا کند.
|
||||
|
||||
این اصل مشابه در سیستم عامل های مدرن موبایل مانند iOS و Android نیز مورد استفاده قرار می گیرد، جایی که برنامه های تلفن همراه دارای مجوز هایی هستند که با کنترل دسترسی به API ها قابل اجرا هستند.
|
||||
|
||||
به عنوان مثال اگر یک توسعه دهنده سعی دارد از طریق API دوربین به دوربین شما دسترسی پیدا کند، می توانید درخواست اجازه برنامه را رد کنید و برنامه هیچ راهی برای دسترسی به دوربین دستگاه شما ندارد.
|
||||
|
||||
سیستم های پرونده ای که از مجوزها استفاده می کنند همانند Windows ،Mac و Linux این مجوزها را توسط API سیستم فایل اجرا می کنند.
|
||||
|
||||
یک برنامه معمولی دسترسی مستقیم به هارد دیسک فیزیکی خام ندارد. در عوض برنامه باید از طریق API به فایل ها دسترسی پیدا کند.
|
||||
# API ها برای ارتباط بین خدمات استفاده می شوند.
|
||||
<p align="center">
|
||||
<img src="img/3.jpg" />
|
||||
</p>
|
||||
رابط برنامه نویسی کاربردی
|
||||
|
||||
ای پی آی ها به دلایل دیگر نیز مورد استفاده قرار می گیرند.
|
||||
|
||||
به عنوان مثال اگر تاکنون یک شیء Google Maps را در یک وب سایت جاسازی کرده اید، مشاهده کرده اید که آن وب سایت از API Google Maps برای جاسازی آن نقشه استفاده می کند.
|
||||
|
||||
گوگل API هایی مانند این را در اختیار برنامه نویسان وب قرار می دهد، آن ها می توانند از API ها برای جاسازی اشیاء پیچیده در وب سایت خود استفاده کنند.
|
||||
|
||||
اگر API هایی مانند این وجود نداشت، ممکن بود توسعه دهندگان نقشه های خود را ایجاد کرده و داده های مورد نظر خود را در آن وارد کنند و یا با دیگر منابع هیچ تعاملی برقرار نکنند.
|
||||
|
||||
با وجود API گوگل می توان دسترسی به Google Maps را در وب سایت های شخص ثالث کنترل کرد و اطمینان حاصل کرد که توسعه دهندگان به جای تلاش برای جاسوسی مخفیانه، از روشی ثابت استفاده می کنند.
|
||||
|
||||
این امر در مورد بسیاری از خدمات آنلاین مختلف صدق می کند.
|
||||
|
||||
API هایی برای درخواست ترجمه متن از Google Translate یا جاسازی نظرات یا توییت های فیس بوک از توییتر در وب سایت وجود دارد.
|
||||
|
||||
همچنین استاندارد OAuth تعدادی ای پی آی را تعریف می کند که به شما امکان می دهد با یک سرویس دیگر وارد وب سایت شوید.
|
||||
|
||||
به عنوان مثال از حساب های Facebook ،Google یا Twitter استفاده کنید تا وارد یک وب سایت جدید شوید (بدون ایجاد یک حساب کاربری جدید فقط برای آن سایت).
|
||||
|
||||
API ها قرارداد های استانداردی هستند که چگونگی برقراری ارتباط توسعه دهندگان با یک سرویس را مشخص می کنند.
|
||||
|
||||
اگر تا کنون با آن ها کار کرده اید خود بهتر می دانید که API چیست. در نهایت شما واقعاً نیازی به دانستن API ندارید، مگر اینکه شما یک برنامه نویس باشید.
|
||||
|
||||
اما اگر می بینید که یک پلتفرم نرم افزاری یا خدمات، API های جدیدی را برای سخت افزار یا خدمات مختلف اضافه کرده است، بدانید که استفاده از چنین ویژگی هایی برای توسعه دهندگان راحت تر است.
|
||||
|
||||
<p align="center" dir="rtl">صلوات</p>
|
||||
</div>
|
239
2-The Api and postman/2-How_use_the_postman.md
Normal file
|
@ -0,0 +1,239 @@
|
|||
<div align="right" dir="rtl">
|
||||
|
||||
<p align="center" dir="rtl">بسم الله الرحمن الرحیم</p>
|
||||
|
||||
# معرفی Postman
|
||||
|
||||
|
||||
## Postman چیست و راهنمای کار با آن
|
||||
|
||||
در این مطلب قصد داریم در مورد راهنمای استفاده از postman و روش تست وب سرویس با postman را خدمتتان توضیح دهیم.
|
||||
|
||||
## معرفی کوتاه
|
||||
|
||||
به نظر می رسد اگر بخواهیم در یک جمله مهمترین خصوصیت و ویژگی کاربردی نرم افزار و افزونه Postman را نام ببریم باید چنین بگوییم:
|
||||
Postman امکان تست ، اجرا و بررسی کد ها و متد های نوشته شده WebAPI را برای ما بسیار آسان می سازد.
|
||||
در محیط برنامه نویسی وقتی یک Web API را پیاده سازی می کنیم برای تست آن در همان محیط ، ناچاریم کد هایی سمت کلاینت بنویسیم که بتوانیم خروجی آن را بررسی نماییم، یعنی باید کد اصلی که قرار هست بنویسیم را شبیه سازی کنیم، اما همیشه انجام این کار برای ما از نظر زمانی مقرون به صرفه نیست و ما دوست داریم بسیار سریع خروجی برنامه خود را مشاهده کنیم و در زمان هایی که در کد های خود تغییر می دهیم به آسانی بتوانیم خروجی و نتیجه تغییرات خود را نیز ملاحظه نماییم. همچنین در برخی از مواقع تست خروجی توسط برنامه اصلی کار دشوار و پر چالشی است. بنابرین وجود یک نرم افزار واسط برای این کار بسیار کارآمد بوده و استفاده از آن به ما کمک شایانی خواهد کرد.
|
||||
|
||||
## شکل های مختلف Postman
|
||||
|
||||
Postman به چند صورت به مشتریان و کاربران ارایه شده است که در وب سایت اصلی نرم افزار در صفحه Apps قرار داده شده اند که برای سیستم عامل های ویندوز، مکینتاش و لینوکس تهیه و ارایه شده است. همچنین این نرم افزار به صورت افزونه Google Chrome نیز در اختیار کاربران و برنامه نویسان قرار گرفته است که می توانید با استفاده از لینک Postman Addon آن را به مروگر خود اضافه نمایید. ممکن است برای اضافه کردن Addon این نرم افزار نیاز به پروکسی (فیلتر شکن / وی پی ان) داشته باشید. بیش از 3/700/000 نفر تا به امروز این افزونه را به مرورگر خود اضافه کرده اند و از امکانات آن استفاده می کنند.
|
||||
Addon مربوطه و یا برنامه تحت سیستم عامل مورد نظر خود را نصب نمایید که در ادامه راه باید آن را اجرا نمایید تا بتوانیم از آن استفاده کنیم. برای استفاده از Postman بهتر است که داخل برنامه و یا وب سایت مربوطه یک حساب کاربری برای خود ایجاد کنید و تا بتوانید لاگین کرده و از برنامه استفاده نمایید.
|
||||
|
||||
در این مقاله ما از یک برنامه از قبل نوشته شده برای آموزش استفاده خواهیم کرد، بنابراین فرض می کنیم مخاطب این مقاله نحوه پیاده سازی یک Web API را می داند و ما در این جا از ارایه آموزش نوشتن یک برنامه Web API صرف نظر می نماییم. در صورت نیاز به یاد گیری مباحث مربوط به Web API به دیگر مقالات ما مراجعه فرمایید.
|
||||
از بخش ضمایم این مطلب که در پایین صفحه قرار دارد فایل Todo.zip را دریافت کرده و آن را از حالت فشرده خارج ساخته و با Visual Studio 2017 آن را اجرا نمایید تا Solution باز گردد تا بتوانیم آن را اجرا کنیم. برای تست Web API های نوشته شده باید برنامه ما ابتدا جایی به صورت دائمی هاست شده باشد و یا از IIS Express تعبیه شده درون Visual Studio استفاده نماییم و اجرای برنامه باعث خواهد شد که Web API ما توسط IIS Express هاست گردد. اگر برنامه را اجرا کنید صفحه زیر را مشاهده خواهید کرد. ( ممکن است اسامی که شما می بینید متفاوت با آن چیزی باشد که در تصویر زیر مشاهده می کنید.)
|
||||
|
||||
<p align="center">
|
||||
<img src="img/postman/1.jpg" />
|
||||
</p>
|
||||
می توانید با استفاده از لینک های Create New ، Delete ، Edit و Details صحت عملکرد برنامه را امتحان نمایید. در این برنامه چهار Web API پیاده سازی شده است که کد آن ها در فایل TodoApiController.cs داخل پوشه Controllers قرار دارد که میتوانید آن را بررسی نمایید. اگر لینک http://localhost:63274/swagger/ را در بخش آدرس مرورگر وارد کرده و آن را مشاهده نمایید صفحه زیر را خواهید دید که لیست Web API های نوشته شده را نشان خواهد داد. ( توجه داشته باشید که در صورت متفاوت بودن عدد پورت داخل لینک آن را به پورت مورد نظر تغییر دهید )
|
||||
|
||||
|
||||
<p align="center">
|
||||
<img src="img/postman/2.jpg" />
|
||||
</p>
|
||||
|
||||
حال می خواهیم این چهار Web API را تست کنیم.
|
||||
|
||||
Postman را اجرا کنید تا صفحه زیر نمایان گردد.
|
||||
|
||||
<p align="center">
|
||||
<img src="img/postman/3.jpg" />
|
||||
</p>
|
||||
|
||||
## تست متد GET
|
||||
|
||||
ابتدا می خواهیم که متد GET نوشته شده را آزمایش نماییم. برای این کار باید سه کار انجام دهیم
|
||||
1- ابتدا باید نوع HTTP Action مورد نظر خود را از لیست انتخاب نماییم که برای این متد ، GET است.
|
||||
|
||||
<p align="right">
|
||||
<img src="img/postman/4.jpg" />
|
||||
</p>
|
||||
2 - سپس آدرس (URL) مربوط به Web API خود را در قسمت مربوطه مقابل HTTP Action انتخاب شده وارد نمایید.
|
||||
آدرس مربوط به متد GET :
|
||||
http://localhost:63274/api/GetAllTodos
|
||||
<p align="right">
|
||||
<img src="img/postman/5.jpg" />
|
||||
</p>
|
||||
3- حال روی کلید آبی Send کلیک کنید تا Web API مربوطه اجرا شده و نتیجه برای ما نمایش داده شود. نتیجه اجرا به شکل زیر خواهد بود:
|
||||
|
||||
<p align="center">
|
||||
<img src="img/postman/6.jpg" />
|
||||
</p>
|
||||
|
||||
همانطور که مشاهده می فرمایید لیست ما به صورت خروجی Json قابل مشاهده است. بنابراین تست ما با موفقیت انجام گرفته و برنامه ما (Web API) به طور صحیح کار می کند.
|
||||
|
||||
|
||||
اگر برنامه اشاره شده بالا، که با Visual Studio اجرا کردیم را فعال نمی کردیم ، یعنی Web API ما اجرا نمی شد، بدین معنی بود که چنین Web API ای اصلا وجود خارجی ندارد، و در این حالت کلید Send را کلیک می کردیم. خروجی مانند شکل زیر را مشاهده می کردیم:
|
||||
<p align="center">
|
||||
<img src="img/postman/7.jpg" />
|
||||
</p>
|
||||
همانطور که مشاهده می فرمایید Postman دلایل احتمالی ایجاد این خطا را به ما نشان می دهد.
|
||||
|
||||
## تست متد Post
|
||||
|
||||
حال می خواهیم متد POST نوشته شده را آزمایش نماییم. برای این کار باید چهار کار انجام دهیم
|
||||
1- ابتدا در نرم افزار Postman یک تب جدید برای تست این متد باز می کنیم و سپس باید نوع HTTP Action مورد نظر خود را از لیست انتخاب نماییم که برای این متد ، POST است.
|
||||
2 - سپس آدرس (URL) مربوط به Web API خود را در قسمت مربوطه مقابل HTTP Action انتخاب شده وارد نمایید.
|
||||
آدرس مربوط به متد POST :
|
||||
http://localhost:63274/api/AddTodo
|
||||
3- حال باید ورودی مورد نیاز تابع AddToDo را که در کلاس TodoApiController.cs قرار دارد را در اختیار این URL قرار دهیم. این ورودی باید به صورت Json باشد.
|
||||
کلاس مربوط به Object ما به شک زیر است که یک آبجکت ToDo است:
|
||||
<div align="left" dir="ltr">
|
||||
public class Todo : IBaseEntity
|
||||
{
|
||||
public Todo();
|
||||
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
</div>
|
||||
در تب زیرین ، سومین Tab را که Body است انتخاب می کنیم و سپس از موارد زیر آن تب، روی Raw کلیک می کنیم تا انتخاب شود، برای دادن ورودی به تابع Post مان باید مقدار Json ای را که آماده می کنیم در اینجا Paste کنیم.
|
||||
در نظر داشته باشید که قالب ورودی تابع باید از روی لیست آبشاری JSON (Application / JSON) انتخاب شده باشد.
|
||||
مقدار ورودی json ما می تواند چنین باشد:
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
"id" : 5,
|
||||
"name" : "buy a theater ticket"
|
||||
}
|
||||
</div>
|
||||
این عبارت را در قسمت Body که در بالا اشاره کردیم Paste کنید تا همه چیز آماده گردد.
|
||||
<p align="center">
|
||||
<img src="img/postman/8.jpg" />
|
||||
</p>
|
||||
4- حال روی کلید آبی Send کلیک کنید تا Web API مربوطه اجرا شده و نتیجه برای ما نمایش داده شود. نتیجه اجرا به شکل زیر خواهد بود:
|
||||
<p align="center">
|
||||
<img src="img/postman/9.jpg" />
|
||||
</p>
|
||||
اگر نتیجه موفقیت آمیز باشد و خطایی از جانب WebAPI ایجاد نشده باشد، وضعیت نمایش داده شده مقدار 200 را خواهد داشت که در شکل بالا هم می بینیم.
|
||||
<p align="center">
|
||||
<img src="img/postman/10.jpg" />
|
||||
</p>
|
||||
aاگر موس را روی کلمه Status نگه داریم یک پنجره ای ظاهر خواهد شد که توضیحاتی در مورد این وضعیت با ما ارایه می دهد. ( مانند شکل زیر : )
|
||||
<p align="center">
|
||||
<img src="img/postman/11.jpg" />
|
||||
</p>
|
||||
|
||||
زمان اجرای این API نیز مقابل عبارت Time با واحد میلی ثانیه نمایش داده شده است. همچنین اگر موس را روی کلمه Size نگه داریم ، پنجره ای مشابه پنجره زیر را مشاهده خواهید کرد:
|
||||
<p align="center">
|
||||
<img src="img/postman/12.jpg" />
|
||||
</p>
|
||||
|
||||
که در اینجا هم میزان حجم بدنه و هدر جواب API ی را که به سمت ما ارسال شده است نمایش می دهد.
|
||||
|
||||
مقداری را که متد Post بازگشت داده است را در قسمت Body می بینید. مقدار id که بازگردانده شده است ممکن است با مقداری که ما به سمت WebAPI ارسال کرده ایم متفاوت باشد. چون این مقدار ممکن است کلید اصلی جدول ما باشد و سیستم به صورت خودکار آخرین عدد قابل تخصیص را به رکورد مورد نظر تعیین کرده و برای ما بازگشت داده باشد. حال اگر صفحه Index را که لیست ToDo ها در آن نمایش داده می شوند را Refresh کنیم نتیجه را چنین خواهیم دید:
|
||||
|
||||
<p align="center">
|
||||
<img src="img/postman/13.jpg" />
|
||||
</p>
|
||||
|
||||
|
||||
## تست متد Put
|
||||
|
||||
حال نوبت آن رسیده است تا متد PUT نوشته شده را آزمایش نماییم. تست این متد دقیقا مانند تست متد POST است و برای این کار نیز باید چهار کار انجام دهیم.
|
||||
1- ابتدا در نرم افزار Postman یک تب جدید برای تست متد PUT باز می کنیم و سپس باید نوع HTTP Action مورد نظر خود را از لیست انتخاب نماییم که برای این متد ، PUT است.
|
||||
2 - سپس آدرس (URL) مربوط به Web API خود را در قسمت مربوطه مقابل HTTP Action انتخاب شده وارد نمایید.
|
||||
آدرس مربوط به متد PUT :
|
||||
http://localhost:63274/api/UpdateTodo
|
||||
3- حال باید ورودی مورد نیاز تابع UpdateTodo را که در کلاس TodoApiController.cs قرار دارد را در اختیار این URL قرار دهیم. این ورودی نیز باید به صورت Json باشد.
|
||||
طبق مثال قبل در تب زیرین ، سومین Tab را که Body است انتخاب می کنیم و سپس از موارد زیر آن تب، روی Raw کلیک می کنیم تا انتخاب شود، برای دادن ورودی به تابع PUT مان باید مقدار Json ای را که آماده می کنیم در اینجا Paste کنیم.
|
||||
در نظر داشته باشید که قالب ورودی تابع باید از روی لیست آبشاری JSON (Application / JSON) انتخاب شده باشد.
|
||||
مقدار ورودی json ما می تواند چنین باشد:
|
||||
( باید در نظر داشته باشیم که مقدار id که در عبارت Json قرار می دهیم باید معادل آن در لیست ما وجود داشته باشد. id را که در مثال قبلی WebAPI بازگشت داده بود را به عنوان ID در نظر می گیریم. عنوان مربوط به این id را تغییر می دهیم.
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
{
|
||||
"id" : 5,
|
||||
"name" : "Buy two Concert ticket"
|
||||
}
|
||||
</div>
|
||||
این عبارت را در قسمت Body که در بالا اشاره کردیم Paste کنید تا همه چیز آماده گردد.
|
||||
4- حال روی کلید آبی Send کلیک کنید تا Web API مربوطه اجرا شده و نتیجه برای ما نمایش داده شود. نتیجه اجرا به شکل زیر خواهد بود:
|
||||
<p align="center">
|
||||
<img src="img/postman/14.jpg" />
|
||||
</p>
|
||||
|
||||
|
||||
اگر نتیجه موفقیت آمیز باشد و خطایی از جانب WebAPI ایجاد نشده باشد، وضعیت نمایش داده شده مقدار 200 را خواهد داشت که در شکل بالا هم می بینیم.
|
||||
مقداری را که متد PUT بازگشت داده است را در قسمت Body می بینید. مقدار id که بازگردانده شده است دقیقا Id همان رکوردی است که قصد ویرایش عنوان آن را داشتیم. حال اگر صفحه Index را که لیست ToDo ها در آن نمایش داده می شوند را Refresh کنیم نتیجه را چنین خواهیم دید:
|
||||
|
||||
<p align="center">
|
||||
<img src="img/postman/15.jpg" />
|
||||
</p>
|
||||
|
||||
اگر به جای آی دی 5 ، مقداری را وارد کنیم که معادل آن را در لیست رکورد های خود نداریم ، مثلا عدد 15، و سپس کلید آبی Send را کلیک کنیم، نتیجه چنین خواهد بود:
|
||||
|
||||
<p align="center">
|
||||
<img src="img/postman/16.jpg" />
|
||||
</p>
|
||||
|
||||
همانطور که مشاهده می کنید، نتیجه 204 No Content است.
|
||||
|
||||
## تست متد Delete
|
||||
|
||||
برای تست متد Delete چنین عمل می کنیم.
|
||||
1- ابتدا در نرم افزار Postman یک تب جدید برای تست متد Delete باز می کنیم و سپس باید نوع HTTP Action مورد نظر خود را از لیست انتخاب نماییم که برای این متد ، Delete است.
|
||||
2 - سپس آدرس (URL) مربوط به Web API خود را در قسمت مربوطه مقابل HTTP Action انتخاب شده وارد نمایید.
|
||||
آدرس مربوط به متد DELETE :
|
||||
http://localhost:63274/api/DeleteTodo/{id}
|
||||
باید مقدار {id} را با کلید رکوردی که قصد حذف کردن آن را داریم جایگزین کنیم. برای امتحان، رکورد با شناسه 1 را حذف می کنیم. بنابراین URL ما چنین خواهد بود.
|
||||
http://localhost:63274/api/DeleteTodo/1
|
||||
3- حال مانند مثال های قبل روی کلید آبی Send کلیک کنید تا Web API مربوطه اجرا شده و نتیجه برای ما نمایش داده شود. نتیجه اجرا به شکل زیر خواهد بود:
|
||||
<p align="center">
|
||||
<img src="img/postman/17.jpg" />
|
||||
</p>
|
||||
|
||||
اینجا هم اگر نتیجه موفقیت آمیز باشد و خطایی از جانب WebAPI ایجاد نشده باشد، وضعیت نمایش داده شده مقدار 200 را خواهد داشت که در شکل بالا هم می بینیم.
|
||||
اگر صفحه لیست رکورد ها را Refresh کنیم، خواهیم دید که رکورد مربوطه از لیست حذف شده است. در شکل زیر نتیجه را می بینیم.
|
||||
<p align="center">
|
||||
<img src="img/postman/18.jpg" />
|
||||
</p>
|
||||
|
||||
همانطور که ملاحظه فرمودید ما توانستیم به راحتی متد های Post، Put ، Get و Delete را تست نماییم. البته تست متد هایی مانند Put و Post برای آبجت های پیچیده به راحتی مثال های ارایه شده نیست، سختی آبجکت های پیچیده در تبدیل ورودی ها به Json است که بتوانیم آن را به عنوان ورودی متد Post و Put ارایه نماییم.
|
||||
|
||||
## تب های History و Collection
|
||||
|
||||
اگر دقت بفرمایید در سمت چپ نرم افزار Postman دو tab را مشاهده می کنیم به نام های History و Collections. همانطور که از نام تب History پیداست ، در این قسمت تاریخچه ای از آخرین درخواست های ارسال شده به Postman نگهداری می شود. این تاریخچه به ما کمک می کند که برای تست هر کدام از این متد ها، دیگر مجبور نباشیم مراحل مربوط به انتخاب نوع متد، وارد کردن Url مربوطه، انتخاب نوع ورودی، وارد کردن مقدار ورودی و ... را از اول تکرار کنیم. تنها با انتخاب آیتم مربوطه از بخش History و با کلیک روی کلید Send، میتوانیم API مربوطه را تست نماییم.
|
||||
اگر موس را روی هر کدام از آیتم های داخل تب History نگه داریم ، علامت + را مشاهده خواهیم:
|
||||
<p align="center">
|
||||
<img src="img/postman/19.jpg" />
|
||||
</p>
|
||||
|
||||
اگر روی علامت و کلید + روی متد Get کلیک کنیم صفحه زیر ظاهر خواهد شد.
|
||||
|
||||
|
||||
همانطور که مشاهده می فرمایید می توانید متد مربوطه را به یک Collection موجود اضافه نمایید و یا با کلیک روی عبارت + Create Collection یک Collection جدید ایجاد و متد مربوطه را به این کالکشن جدید اضافه نمایید. در اصل این کار به ما کمک می کند تا بتوانیم Web Api ها خود را برای تست آنها، دسته بندی نماییم و آن را به طور ثابت در حافظه نرم افزار Postman ثبت کنیم. ما چند متد تست شده خودمان را تحت عنوان API Test ذخیره می کنیم. سپس روی تب Collection کلیک می کنیم و نتیجه زیر را خواهیم دید:
|
||||
<p align="center">
|
||||
<img src="img/postman/20.jpg" />
|
||||
</p>
|
||||
|
||||
همانطور که مشاهده می فرمایید می توانید متد مربوطه را به یک Collection موجود اضافه نمایید و یا با کلیک روی عبارت + Create Collection یک Collection جدید ایجاد و متد مربوطه را به این کالکشن جدید اضافه نمایید. در اصل این کار به ما کمک می کند تا بتوانیم Web Api ها خود را برای تست آنها، دسته بندی نماییم و آن را به طور ثابت در حافظه نرم افزار Postman ثبت کنیم. ما چند متد تست شده خودمان را تحت عنوان API Test ذخیره می کنیم. سپس روی تب Collection کلیک می کنیم و نتیجه زیر را خواهیم دید:
|
||||
|
||||
<p align="center">
|
||||
<img src="img/postman/21.jpg" />
|
||||
</p>
|
||||
|
||||
هر کدام از Collection های ایجاد شده را می توان به یک فایل Json تبدیل ( Export ) کرد. تا بتوانیم در زمان دیگری آن را دوباره در این نرم افزار وارد ( Import ) نماییم. ممکن است به هر دلیلی برای نرم افزار مشکلی پیش بیاید که بخواهیم سیستم عامل خود را تغییر دهیم و یا اصلا بخواهیم یک Collection خاصی را برای یک شخص دیگری که از همین نرم افزار استفاده می کند، ارسال نماییم تا ایشان هم بتوانند از این Collection استفاده نمایند. اگر موس را روی عنوان کالکشن نگه داریم، کلیدی به علامت ... ظاهر می شود که با کلیک روی آن منویی ظاهر خواهد شد که امکاناتی را در اختیار ما قرار خواهد داد. به شکل زیر دقت فرمایید:
|
||||
<p align="center">
|
||||
<img src="img/postman/22.jpg" />
|
||||
</p>
|
||||
|
||||
با کلیک روی کلید Export صفحه ای ظاهر خواهد شد که به احتمال نسخه قالب مورد نظر را سوال خواهد کرد که آخری را انتخاب نمایید که فایل خروجی طبق آخرین استاندارد موجود ایجاد گردد. حال می توانیم فایل ایجاد شده را جایی برای خود ذخیره نماییم یا برای شخص دیگری ارسال کنیم. اگر بخواهیم همین فایل را بعدا بارگزاری کنیم می توانیم از منوی Import این کار را انجام دهیم:
|
||||
<p align="center">
|
||||
<img src="img/postman/23.jpg" />
|
||||
</p>
|
||||
|
||||
بعد از کلیک روی آن پنجره ای ظاهر شده و امکانات متعددی را در اختیار ما قرار می دهد. به شکل زیر توجه کنید:
|
||||
<p align="center">
|
||||
<img src="img/postman/24.jpg" />
|
||||
</p>
|
||||
|
||||
از همان منوی اول استفاده نموده و فایل مربوطه را انتخاب و Import نمایید.
|
||||
|
||||
[منبع](https://www.radcom.co/fa/kb/5347/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87-%D9%88-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-Postman)
|
||||
|
||||
|
||||
|
||||
<p align="center" dir="rtl">صلوات</p>
|
||||
</div>
|
BIN
2-The Api and postman/img/0.jpg
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
2-The Api and postman/img/1.jpg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
2-The Api and postman/img/2.jpg
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
2-The Api and postman/img/3.jpg
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
2-The Api and postman/img/postman/1.jpg
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
2-The Api and postman/img/postman/10.jpg
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
2-The Api and postman/img/postman/11.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
2-The Api and postman/img/postman/12.jpg
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
2-The Api and postman/img/postman/13.jpg
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
2-The Api and postman/img/postman/14.jpg
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
2-The Api and postman/img/postman/15.jpg
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
2-The Api and postman/img/postman/16.jpg
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
2-The Api and postman/img/postman/17.jpg
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
2-The Api and postman/img/postman/18.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
2-The Api and postman/img/postman/19.jpg
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
2-The Api and postman/img/postman/2.jpg
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
2-The Api and postman/img/postman/20.jpg
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
2-The Api and postman/img/postman/21.jpg
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
2-The Api and postman/img/postman/22.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
2-The Api and postman/img/postman/23.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
2-The Api and postman/img/postman/24.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
2-The Api and postman/img/postman/3.jpg
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
2-The Api and postman/img/postman/4.jpg
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
2-The Api and postman/img/postman/5.jpg
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
2-The Api and postman/img/postman/6.jpg
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
2-The Api and postman/img/postman/7.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
2-The Api and postman/img/postman/8.jpg
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
2-The Api and postman/img/postman/9.jpg
Normal file
After Width: | Height: | Size: 68 KiB |
189
3-The FatFree Framework/1-The_FatFree_Framework.md
Normal file
|
@ -0,0 +1,189 @@
|
|||
<div align="right" dir="rtl">
|
||||
|
||||
<p align="center" dir="rtl">بسم الله الرحمن الرحیم</p>
|
||||
|
||||
# فت فری (Fat-Free)
|
||||
|
||||
فریمورک فت فری هم یک میکرو فریمورک PHP است. این فریمورک بین ویژگیهای کاربرد، استفاده آسان، سادگی و سرعت تعادل برقرار میکند. فت فری در سال 2009 معرفی شده است.
|
||||
|
||||
پایگاه کد این فریمورک حدود 65 کیلو بایت است و به همین دلیل سرعت بالایی دارد. شما میتوانید در صورت نیاز آن را با افزونههایی که میخواهید گسترش دهید.
|
||||
|
||||
فریم ورک پی اچ پی فت فری
|
||||
## ویژگی های مهم فت فری
|
||||
|
||||
* مدولار است.
|
||||
* مستندات بسیار واضح و سادهای دارد.
|
||||
|
||||
|
||||
## مزایای فت فری
|
||||
|
||||
* سرعت بالایی دارد.
|
||||
* یادگیری آن آسان است.
|
||||
|
||||
|
||||
## معایب فت فری
|
||||
|
||||
* به دلیل آن که میکرو فریمورک است امکان توسعه فول استک ندارد.
|
||||
|
||||
## معرفی سایت اصلی فت فری
|
||||
[سایت اصلی fatfree](https://fatfreeframework.com/3.8/user-guide)
|
||||
|
||||
## آموزش نصب و راه اندازی فریم ورک فت فری
|
||||
|
||||
در این پست با نحوه نصب فریم ورک fat-free بر روی سیستم عامل لینوکس ابونتو و ویندوز اشنا خواهیم شد.
|
||||
|
||||
ما ساختار معماری 3 لایه یا همون mvc رو در این فریم ورک پیاده سازی خواهیم کرد برای نصب fatfree موارد زیر را باید انجام دهیم
|
||||
|
||||
* نصب برنامه git و Composer
|
||||
* دانلود fatfree
|
||||
* پیاده سازی فریم ورک
|
||||
|
||||
کاربران ویندوز هم می توانند با کلیک روی لینک های بالا وارد سایت مورد نظر بشن و فایل نصب git و composer رو دانلود و به راحتی نصب کنند بقیه مراحل در هر دو سیستم عامل یکسان است
|
||||
|
||||
برای نصب git کد زیر را در ترمینال اجرا کنید
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
|
||||
sudo apt-get install git
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
برای نصب Composer
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
بعد از نصب برنامه های بالا فریم ورک fat-free رو از لینک زیر دریافت کنید
|
||||
|
||||
[دانلود fatfree framework](https://github.com/bcosca/fatfree/archive/master.zip)
|
||||
|
||||
بعد از دانلود فایل را در فولدر مناسبی از حالت فشرده خارج کنید. وارد فولدر fatfree-master شوید و روی پنجره فولدر راست کلیک کنید و open Terminal رو بزنید حالا کد زیر رو با حالت ادمین در ترمینال اجرا کنید و منتظر بمونید تا نصب کامل بشه ممکنه کمی زمان بر باشه
|
||||
|
||||
کاربران ویندوز در cmd باید دستور زیرو وارد کنند
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
composer install
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
در صورتی که نصب درست انجام شده باشه یک فولدر به نام vendor به فولدر پروژه ما اضافه شده است اگر روی سیستم شما سرور مجازی نصب باشد می توانید در مرورگر خود نتیجه را مشاهده کنید
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
http://localhost/sample/fatfree-master/
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
حالا میخواهیم پروژه خود را به صورت MVC ساختار دهی کنیم فولدری به نام app بسازید حال به درون فولدر app رفته و 3 فولدر به نام های controllers و file و views بسازید
|
||||
|
||||
حالا به ریشه اصلی پروژه یعنی همان فولدر fatfree-master می رویم درون این فولدر فایل index.php را باز کنید کد های درون ان را به کلی پاک کنید و کدهای زیر را درون آن قرار دهید و ذخیره کنید
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
|
||||
<?php
|
||||
|
||||
require_once("vendor/autoload.php");
|
||||
|
||||
$f3 = Base::instance();
|
||||
|
||||
$f3->config('config.ini');
|
||||
$f3->config('routes.ini');
|
||||
|
||||
$f3->run();
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
حالا فایلی به اسم routes.ini بسازید و کد زیر را داخل آن ذخیره کنید .
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
[routes]
|
||||
|
||||
;base routes
|
||||
GET /=MainController->main
|
||||
GET /hello=MainController->showHello
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
باز فایلی به نامconfig.ini بسازید و کد های زیر را درون آن ذخیره کنید
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
[globals]
|
||||
|
||||
DEBUG=3
|
||||
UI=app/views/
|
||||
AUTOLOAD=app/controllers/
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
حال به فولدرcontrollers که ساخته بودیم میریم (app/controllers) و درون آن فایلی به نام MainController.php می سازیم و کد زیر را درون ان ذخیره میکنیم
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
<?php
|
||||
|
||||
class MainController {
|
||||
|
||||
function showHello(){
|
||||
echo 'Hello https://beta.hamfahmi.ir/dashboard/view :)';
|
||||
}
|
||||
function main(){
|
||||
echo 'OK';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
خیلی خب کار تمام است حالا با مرورگر خود به مسیر پروژه برید پیام OK برای شما نشان داده می شود (http://localhost/sample/fatfree-master)
|
||||
|
||||
حال اگر جلوی ادرس کلمه hello را وارد کنید به این صورت :
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
|
||||
```r
|
||||
http://localhost/sample/fatfree-master/hello
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
پیام زیر رو به شما نشون میده
|
||||
|
||||
<div align="left" dir="ltr">
|
||||
<p style="background-color:black;color:white" >
|
||||
Hello https://beta.hamfahmi.ir/dashboard/view :
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
[منبع](http://takacsmark.com/fat-free-php-framework-tutorial-3-mvc-project-structure/)
|
||||
|
||||
<p align="center" dir="rtl">صلوات</p>
|
||||
|
||||
</div>
|
BIN
3-The FatFree Framework/img/Fat-Free-framework.jpg
Normal file
After Width: | Height: | Size: 106 KiB |