Forwarded from LearnPOV | لرن پی او وی
#tools #website #api #fake_api
💎 معرفی وبسایت 💎
اگر front-end دولوپر هستید و نیاز به api با دیتای فارسی دارید برای ساخت نمونه کار و پروژه های تمرینی خودتون میتونید از وبسایت https://iransweb.com استفاده کنید که توسط یکی از هموطن های خوبمون ساخته شده 🤞🚀
به درد کیا میخوره ؟ 🤔
این وبسایت برای افرادی که نیاز به api فارسی دارند برای پروژه های خودشون میتونه گزینه بسیار خوبی باشه زیرا دسته بندی های مختلفی را مانند فروشگاه موبایل، قهوه، پوشاک و ... را برای api ها در نظر گرفته که تنوع خوبی ایجاد میکنه برای استفاده شما 🔥
این هم پست لینکدین سجاد عزیز، سازنده این وبسایت هست که میتونید برای حمایت از ایشون از صفحه خودشون وارد سایت بشید ⚡
Channel | YouTube | Instagram
Iransweb
api فارسی
api فارسی برای برنامه نویسان_ایرانزوب_فروم برای برنامه نویسان فارسی زبان_سولات و صحبت های برنامه نویسان
Forwarded from LearnPOV | لرن پی او وی
#tools #website #api #fake_api
💎 معرفی وبسایت 💎
اگر front-end دولوپر هستید و نیاز به api با دیتای فارسی دارید برای ساخت نمونه کار و پروژه های تمرینی خودتون میتونید از وبسایت https://iransweb.com استفاده کنید که توسط یکی از هموطن های خوبمون ساخته شده 🤞🚀
به درد کیا میخوره ؟ 🤔
این وبسایت برای افرادی که نیاز به api فارسی دارند برای پروژه های خودشون میتونه گزینه بسیار خوبی باشه زیرا دسته بندی های مختلفی را مانند فروشگاه موبایل، قهوه، پوشاک و ... را برای api ها در نظر گرفته که تنوع خوبی ایجاد میکنه برای استفاده شما 🔥
این هم پست لینکدین سجاد عزیز، سازنده این وبسایت هست که میتونید برای حمایت از ایشون از صفحه خودشون وارد سایت بشید ⚡
Channel | YouTube | Instagram
Iransweb
api فارسی
api فارسی برای برنامه نویسان_ایرانزوب_فروم برای برنامه نویسان فارسی زبان_سولات و صحبت های برنامه نویسان
Forwarded from کداکسپلور | CodeExplore (Aqa Reza)
Blob یه چیزی تو جاوااسکریپته که بهت اجازه میده دادههای باینری رو توی مرورگر مدیریت کنی. حالا این دادهها چی میتونن باشن؟ هر چیزی! مثلاً یه عکس، یه فایل صوتی، یه متن یا حتی یه ویدئو. خلاصه، Blob وقتی به درد میخوره که میخوای با این جور فایلها سر و کله بزنی.
مثلاً میخوای یه فایل متنی کوچیک بسازی:
let blob = new Blob(["سلام دنیا!"], { type: 'text/plain' });اینجا یه Blob ساختیم که توش یه رشته (متن) هست و نوعش رو هم گفتیم متنه. این نوع خیلی مهمه چون به مرورگر میفهمونه که با چه جور دادهای طرفه.
- `size`: اندازه Blob رو به بایت (مثلاً چند کیلوبایته) نشون میده.
- `type`: نوع Blob رو نشون میده که مثلاً این یه متن سادهست، یه عکس یا هر چیز دیگه.
console.log(blob.size); // اندازه دادهها
console.log(blob.type); // نوع داده
چطور از Blob یه تیکه بگیریم؟
اگه بخوای از یه Blob فقط یه تیکه کوچیک بگیری، میتونی از متد
slice استفاده کنی:let part = blob.slice(0, 5, 'text/plain');
console.log(part.size); // 5 بایت اول از Blob اصلی رو گرفتیم
میتونی از هر جور دادهای مثل آرایه، رشته و غیره Blob بسازی:
let arrayOfData = new Uint8Array([72, 101, 108, 108, 111]);
let blobFromData = new Blob([arrayOfData], { type: 'text/plain' });
لینک دانلود بسازیم!
یه مثال باحال دیگه اینه که از Blob یه لینک دانلود بسازی:
let blob = new Blob(["سلام دنیا!"], { type: 'text/plain' });
let url = URL.createObjectURL(blob);
let a = document.createElement('a');
a.href = url;
a.download = 'hello.txt';
document.body.appendChild(a);
a.click();
URL.revokeObjectURL(url); // یادت نره URL رو بعد از استفاده آزاد کنیاگه بخوای بدونی داخل Blob چیه، میتونی از
FileReader استفاده کنی:let reader = new FileReader();
reader.onload = function(event) {
console.log(event.target.result); // محتوای Blob رو به عنوان متن نشون میده
};
reader.readAsText(blob);
فرض کن میخوای یه فایل رو آپلود کنی. میتونی Blob رو داخل
FormData بذاری و ارسالش کنی:let formData = new FormData();
formData.append('file', blob, 'hello.txt');
fetch('/upload', {
method: 'POST',
body: formData
});
خلاصهاش چیه؟
#js #blob #api
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from کداکسپلور | CodeExplore (𝙰𝚖𝚒𝚗)
#api #github
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - toddmotto/public-apis: A collective list of free APIs
A collective list of free APIs. Contribute to toddmotto/public-apis development by creating an account on GitHub.
Forwarded from Ninja Learn | نینجا لرن
💎 معرفی GraphQL و استفاده ازش 💎
اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمیدونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟
حالا GraphQL چیه؟ 🤔
خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه میده که دقیقاً همون دادههایی که نیاز دارین رو از سرور درخواست کنین. مهمترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، میتونین مشخص کنین چه دادههایی رو دقیقاً میخواین و چه دادههایی رو نمیخواین.
به زبان ساده، GraphQL به شما کنترل بیشتری روی دادههایی که از API میگیرین میده. 🌍
چرا از GraphQL استفاده کنیم؟ 🤷♂️
1⃣ دریافت دادههای دقیق 🎯
و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:
این یعنی فقط همون دادههایی که خواستین برمیگرده و هیچ اطلاعات اضافهای به شما داده نمیشه.
2⃣ بهینهسازی درخواستها 🚀
این بهینهسازی توی عملکرد و سرعت، تاثیر زیادی روی تجربه کاربری داره. 💡
3⃣ پشتیبانی از تکامل تدریجی 💻
1⃣ فیسبوک: همونطور که گفته شد، GraphQL توسط فیسبوک ایجاد شد و فیسبوک همچنان از اون توی بسیاری از محصولات خودش استفاده میکنه، مثل اپلیکیشن فیسبوک و اینستاگرام.
2⃣ گیت هاب: GraphQL به عنوان یک API اصلی توی GitHub استفاده میشه و شما میتونین از طریق GraphQL به اطلاعات پروژهها و کاربران GitHub دسترسی داشته باشین.
3⃣ شاپیفای (Shopify): توی پلتفرم Shopify، از GraphQL برای بهینهسازی و سرعت بخشیدن به APIها استفاده میشه.
حچطور از GraphQL استفاده کنیم؟ 🛠️
راهاندازی GraphQL توی پروژههای مختلف واقعاً سادهست. توی پلتفرمهایی مثل Django یا Node.js، پکیجها و کتابخونههای آمادهای وجود دارن که شما میتونین سریعاً ازشون استفاده کنین.
برای مثال، در Django، شما میتونین با استفاده از Graphene-Django خیلی راحت یه API GraphQL بسازین.
توجه ⚠️:
این فقط یه مثال ساده برای شروع هستش:
و بعد توی پروژهتون:
این کد یه کوئری ساده به اسم
جمعبندی 🎯
فهمیدیم GraphQL با انعطافپذیری و سرعت بالا، باعث میشه که APIهای بهتری طراحی کنین و تجربه کاربری بهتری ارائه بدین.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمیدونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟
حالا GraphQL چیه؟ 🤔
خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه میده که دقیقاً همون دادههایی که نیاز دارین رو از سرور درخواست کنین. مهمترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، میتونین مشخص کنین چه دادههایی رو دقیقاً میخواین و چه دادههایی رو نمیخواین.
به زبان ساده، GraphQL به شما کنترل بیشتری روی دادههایی که از API میگیرین میده. 🌍
چرا از GraphQL استفاده کنیم؟ 🤷♂️
1⃣ دریافت دادههای دقیق 🎯
یکی از بزرگترین مشکلاتی که معماریهای سنتی API دارن اینه که گاهی دادههایی که لازم نداریم رو هم به ما برمیگردونن. GraphQL این مشکل رو حل کرده. شما توی GraphQL میتونین کاملاً مشخص کنین که چه فیلدهایی از دادهها رو نیاز دارین و فقط همونها رو از سرور بگیرین.مثال: فرض کنین میخواین فقط اسم و ایمیل کاربر رو از API بگیرین. کوئری GraphQL میتونه اینطوری باشه:
{
user(id: 1) {
name
email
}
}و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:
{
"data": {
"user": {
"name": "Ali",
"email": "[email protected]"
}
}
}این یعنی فقط همون دادههایی که خواستین برمیگرده و هیچ اطلاعات اضافهای به شما داده نمیشه.
2⃣ بهینهسازی درخواستها 🚀
یکی از مشکلات رایج توی APIهای سنتی، تعداد زیاد درخواستها (requests) برای گرفتن اطلاعات مختلفه. GraphQL به شما این امکان رو میده که با یک درخواست همه دادههای مورد نیازتون رو بگیرین. شما میتونین توی یه کوئری، اطلاعات از چندین منبع مختلف رو دریافت کنین و نیازی به ارسال چندین درخواست نیست.مثال: فرض کنین میخواین اطلاعات کاربر، لیست سفارشها و محصولاتی که خریده رو بگیرین. کوئری GraphQL بهراحتی این اطلاعات رو توی یک درخواست برمیگردونه:
{
user(id: 1) {
name
orders {
id
product {
name
price
}
}
}
}این بهینهسازی توی عملکرد و سرعت، تاثیر زیادی روی تجربه کاربری داره. 💡
3⃣ پشتیبانی از تکامل تدریجی 💻
یکی از ویژگیهای مهم GraphQL اینه که بهراحتی میتونین API خودتون رو بدون اینکه تغییرات بزرگی به وجود بیارین، توسعه بدین. این یعنی میتونین فیلدهای جدیدی به دادههاتون اضافه کنین بدون اینکه نیاز به تغییر توی کل API داشته باشین. این قابلیت، انعطافپذیری زیادی توی توسعه و نگهداری API داره.4⃣ مستندات خودکار 📚
یکی دیگه از ویژگیهای عالی GraphQL، مستندسازی خودکارشه. از اونجایی که GraphQL یک سیستم تایپینگ قوی داره، میتونه بهصورت خودکار مستندات API رو بسازه و شما همیشه مستندات بهروز و کاملی دارین. این خیلی به درد تیمهای توسعهای میخوره که از پروژههای مختلف استفاده میکنن و همیشه باید به مستندات دقیق دسترسی داشته باشن.کاربردهای واقعی GraphQL 📈
1⃣ فیسبوک: همونطور که گفته شد، GraphQL توسط فیسبوک ایجاد شد و فیسبوک همچنان از اون توی بسیاری از محصولات خودش استفاده میکنه، مثل اپلیکیشن فیسبوک و اینستاگرام.
2⃣ گیت هاب: GraphQL به عنوان یک API اصلی توی GitHub استفاده میشه و شما میتونین از طریق GraphQL به اطلاعات پروژهها و کاربران GitHub دسترسی داشته باشین.
3⃣ شاپیفای (Shopify): توی پلتفرم Shopify، از GraphQL برای بهینهسازی و سرعت بخشیدن به APIها استفاده میشه.
حچطور از GraphQL استفاده کنیم؟ 🛠️
راهاندازی GraphQL توی پروژههای مختلف واقعاً سادهست. توی پلتفرمهایی مثل Django یا Node.js، پکیجها و کتابخونههای آمادهای وجود دارن که شما میتونین سریعاً ازشون استفاده کنین.
برای مثال، در Django، شما میتونین با استفاده از Graphene-Django خیلی راحت یه API GraphQL بسازین.
توجه ⚠️:
این فقط یه مثال ساده برای شروع هستش:
pip install graphene-django
و بعد توی پروژهتون:
import graphene
class Query(graphene.ObjectType):
hello = graphene.String()
def resolve_hello(self, info):
return "Hello, world!"
schema = graphene.Schema(query=Query)
این کد یه کوئری ساده به اسم
hello میسازه که وقتی از GraphQL درخواست بشه، مقدار "Hello, world!" رو برمیگردونه.جمعبندی 🎯
فهمیدیم GraphQL با انعطافپذیری و سرعت بالا، باعث میشه که APIهای بهتری طراحی کنین و تجربه کاربری بهتری ارائه بدین.
#django #api #graphql
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
●● معرفی ابزار cURL ●●
برنامه cURL یک ابزار تحت ترمیناله که برای ارسال درخواستهای HTTP و تعامل با #Api ها خیلی استفاده میشه و طرفدارای زیادی داره. این ابزار به شما این امکان رو میده تا درخواستهای مختلفی مثل GET، POST، PUT و DELETE رو از طریق ترمینال ارسال کنید و پاسخ مد نظرتون رو دریافت کنید ⚡
نحوه نصب cURL 🔻
macOS
Linux
Windows
برای نصبش از این لینک هم میتونید کمک بگیرید.
〰️〰️〰️〰️〰️〰️〰️️〰️〰️〰️
برنامه cURL یک ابزار تحت ترمیناله که برای ارسال درخواستهای HTTP و تعامل با #Api ها خیلی استفاده میشه و طرفدارای زیادی داره. این ابزار به شما این امکان رو میده تا درخواستهای مختلفی مثل GET، POST، PUT و DELETE رو از طریق ترمینال ارسال کنید و پاسخ مد نظرتون رو دریافت کنید ⚡
نحوه نصب cURL 🔻
macOS
brew install curl
Linux
sudo apt update && sudo apt install curl
Windows
توی ویندوز 10 به بالا به صورت دیفالت نصبه ولی اگر نصب نبود از صفحه رسمیش میتونید دانلود کنید
برای نصبش از این لینک هم میتونید کمک بگیرید.
#tools | #CURL | #Api
〰️〰️〰️〰️〰️〰️〰️️〰️〰️〰️
Channel | Group | YouTube
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
●● نحوه استفاده از ابزار cURL ●●
توی پست قبلی این ابزار رو معرفی کردیم و توی این پست میخوایم ببینیم چجوری میشه ازش استفاده کرد 🔻
GET
POST
این دو نمونه ساده برای درخواست GET و POST بود و خیلی فلگ های حرفه ای تر و بیشتری وجود داره داخل این ابزار که میتونید ازشون استفاده بکنید 🚀
🌐 وبسایت رسمی cURL
#tools #Api
〰️〰️〰️〰️〰️〰️〰️️〰️〰️〰️
توی پست قبلی این ابزار رو معرفی کردیم و توی این پست میخوایم ببینیم چجوری میشه ازش استفاده کرد 🔻
GET
curl https://fakestoreapi.com/carts
POST
curl -X POST -H "Content-Type: application/json" -d '{"userId":5,"date":"2020-02-03","products":[{"productId":5,"quantity":1},{"productId":1,"quantity":5}]}' https://fakestoreapi.com/cartsاین دو نمونه ساده برای درخواست GET و POST بود و خیلی فلگ های حرفه ای تر و بیشتری وجود داره داخل این ابزار که میتونید ازشون استفاده بکنید 🚀
🌐 وبسایت رسمی cURL
#tools #Api
〰️〰️〰️〰️〰️〰️〰️️〰️〰️〰️
Channel | Group | YouTube
Forwarded from LearnPOV | لرن پی او وی
معماریهای مختلف API و کاربردشون 🚀
خب خب، APIها مدلهای مختلفی دارن که هر کدوم یه رویکرد خاص برای ارتباط بین سیستمها ارائه میدن. اینجا یه معرفی کوتاه و مفید از معروفترین معماریها رو داریم
🌍 REST
🔄 GraphQL
⚡gRPC
🔗 WebSockets
🌟 کدوم رو انتخاب کنیم؟
✅ دیتای ساده و عمومی؟ REST
✅ دیتای دقیق و منعطف؟ GraphQL
✅ سرعت فوقالعاده بالا؟ gRPC
✅ چت، بازی آنلاین و ارتباط زنده؟ WebSockets
خلاصه که هر کدوم جای خودشونو دارن و همه چیز به نیاز های پروژه شما بستگی داره.
خب خب، APIها مدلهای مختلفی دارن که هر کدوم یه رویکرد خاص برای ارتباط بین سیستمها ارائه میدن. اینجا یه معرفی کوتاه و مفید از معروفترین معماریها رو داریم
🌍 REST
چیه؟ یه سبک معماری که روی پروتکل HTTP کار میکنه و از متدهای استاندارد مثل GET و POST استفاده میکنه.
🔹 مثال: GitHub، Twitter
✅ مزایا: سادگی، مقیاسپذیری بالا، خوانایی بالا
❌ معایب: نیاز به درخواستهای متعدد، مصرف بالای پهنای باند
🔄 GraphQL
چیه؟ یه زبان کوئری که به کلاینت اجازه میده دقیقاً اون چیزی که نیاز داره رو درخواست بده و دریافت کنه.
🔹 مثال: Facebook، Shopify
✅ مزایا: دریافت دقیق دادهها، کاهش درخواستها، انعطافپذیری بالا
❌ معایب: پیچیدگی بالا، نیاز به سرور قویتر
⚡gRPC
چیه؟ یه معماری که از پروتکل باینری (Protocol Buffers) استفاده میکنه و ارتباط سریعتری داره، البته خیلی گسترده تره و چون توی این پست نمیگنجه پیشنهاد میکنم حتما خودتون کامل راجبش بخونید.
🔹 مثال: Netflix، Google Cloud
✅ مزایا: سرعت بالا، پشتیبانی از ارتباط دوطرفه (Streaming)
❌ معایب: خوانایی کمتر برای انسان، سختی در دیباگ
🔗 WebSockets
چیه؟ یه پروتکل برای ارتباط دوطرفه بین کلاینت و سرور به صورت Real Time.
🔹 مثال: WhatsApp، Slack
✅ مزایا: تأخیر پایین، ارتباط همزمان دوطرفه
❌ معایب: مدیریت پیچیده تر در اتصال، ناسازگاری با برخی فایروالها
🌟 کدوم رو انتخاب کنیم؟
✅ دیتای ساده و عمومی؟ REST
✅ دیتای دقیق و منعطف؟ GraphQL
✅ سرعت فوقالعاده بالا؟ gRPC
✅ چت، بازی آنلاین و ارتباط زنده؟ WebSockets
خلاصه که هر کدوم جای خودشونو دارن و همه چیز به نیاز های پروژه شما بستگی داره.
#️⃣ #API #WhatsThat
🗨️ 𝗖𝗛𝗔𝗡𝗡𝗘𝗟 | 𝗚𝗥𝗢𝗨𝗣
Forwarded from Ninja Learn | نینجا لرن
چرا نباید لاجیک پروژه رو تو سریالایزرهای DRF پیادهسازی کنیم؟ 🚫
یه موضوع مهم هست که چرا نباید لاجیک پروژهمون رو تو سریالایزرها پیادهسازی کنیم؟ خیلی از افرادی که میشناسم متاسفانه اینکارو میکنن (پیاده سازی لاجیک توی سریالایزر ها) اگه شماهم حزو این دسته افراد هستید این پست براتون مناسبه
اول از همه سریالایزر تو DRF چیه؟
سریالایزرها تو DRF مسئول تبدیل دادهها بین فرمتهای مختلف (مثل JSON و مدلهای Django) هستن. کارشون اینه که دادهها رو بگیرن، اعتبارسنجی (validation) کنن و به شکل مناسب تحویل بدن. مثلاً یه مدل
🚫 چرا این کار بده؟
بعضیها عادت دارن تو متدهای سریالایزر (مثل
1⃣ نقض اصل Single Responsibility:
سریالایزرها برای تبدیل و اعتبارسنجی دادهها طراحی شدن، نه برای مدیریت لاجیک پروژه.
وقتی لاجیک رو اونجا مینویسین، کدتون از یه سریالایزر ساده تبدیل میشه به سریالایزر خیلی گنده که بعداً نگهداریش سخت میشه.
2⃣ کاهش Readability و Testability:
اگه لاجیک تو سریالایزر باشه، پیدا کردنش تو پروژه سختتره و تست کردنش هم پیچیده میشه. مثلاً برای تست یه محاسبه، باید کل سریالایزر رو تست کنین، نه فقط اون لاجیک خاص.
3⃣ مشکلات Scalability:
تو پروژههای بزرگ، وقتی لاجیکها تو سریالایزرها پخش بشن، دیگه نمیتونین به راحتی تغییرشون بدین یا جابهجاشون کنین. یه تغییر کوچیک تو لاجیک ممکنه کل API رو به هم بریزه.
4⃣ وابستگی بیش از حد:
سریالایزرها به مدلها و دادهها وابسته ان. اگه لاجیک پروژه رو اونجا بذارین، هر تغییری تو مدلها یا ساختار دادهها میتونه لاجیکتون رو خراب کنه.
5⃣ سخت شدن دیباگ:
وقتی یه باگ پیش میاد، نمیدونین مشکل از تبدیل دادهست یا از لاجیک پروژه، چون همهچیز قاطی شده.
سخن اخر 🗣
پیادهسازی لاجیک پروژه تو سریالایزرهای DRF مثل اینه که بخوای با چاقو سوپ بخوری؛ میشه، ولی چرا؟! سریالایزرها برای تبدیل و اعتبارسنجی دادهها طراحی شدن، نه برای نگه داشتن لاجیک پیچیده. با انتقال لاجیک به مدلها یا سرویسها، کدتون تمیزتر، قابلنگهداریتر و حرفهایتر میشه. دفعه بعد که خواستین تو سریالایزر لاجیک بنویسین، یه لحظه وایسید و بگین: اینجا جای این کارا نیست 😊
➖➖➖➖➖➖➖➖➖
یه موضوع مهم هست که چرا نباید لاجیک پروژهمون رو تو سریالایزرها پیادهسازی کنیم؟ خیلی از افرادی که میشناسم متاسفانه اینکارو میکنن (پیاده سازی لاجیک توی سریالایزر ها) اگه شماهم حزو این دسته افراد هستید این پست براتون مناسبه
اول از همه سریالایزر تو DRF چیه؟
سریالایزرها تو DRF مسئول تبدیل دادهها بین فرمتهای مختلف (مثل JSON و مدلهای Django) هستن. کارشون اینه که دادهها رو بگیرن، اعتبارسنجی (validation) کنن و به شکل مناسب تحویل بدن. مثلاً یه مدل
User رو به JSON تبدیل میکنن یا برعکس. تا اینجا همهچیز اوکیه، ولی مشکل از جایی شروع میشه که بخوایم لاجیک اصلی پروژه رو تو همین سریالایزرها پیاده سازی کنیم.🚫 چرا این کار بده؟
بعضیها عادت دارن تو متدهای سریالایزر (مثل
to_representation یا validate) لاجیکهای پیچیده بنویسن، مثلاً محاسبات، فیلتر کردن دادهها یا حتی آپدیت دیتابیس. اما این کارا چندتا مشکل بزرگ به وجود میاره1⃣ نقض اصل Single Responsibility:
سریالایزرها برای تبدیل و اعتبارسنجی دادهها طراحی شدن، نه برای مدیریت لاجیک پروژه.
وقتی لاجیک رو اونجا مینویسین، کدتون از یه سریالایزر ساده تبدیل میشه به سریالایزر خیلی گنده که بعداً نگهداریش سخت میشه.
2⃣ کاهش Readability و Testability:
اگه لاجیک تو سریالایزر باشه، پیدا کردنش تو پروژه سختتره و تست کردنش هم پیچیده میشه. مثلاً برای تست یه محاسبه، باید کل سریالایزر رو تست کنین، نه فقط اون لاجیک خاص.
3⃣ مشکلات Scalability:
تو پروژههای بزرگ، وقتی لاجیکها تو سریالایزرها پخش بشن، دیگه نمیتونین به راحتی تغییرشون بدین یا جابهجاشون کنین. یه تغییر کوچیک تو لاجیک ممکنه کل API رو به هم بریزه.
4⃣ وابستگی بیش از حد:
سریالایزرها به مدلها و دادهها وابسته ان. اگه لاجیک پروژه رو اونجا بذارین، هر تغییری تو مدلها یا ساختار دادهها میتونه لاجیکتون رو خراب کنه.
5⃣ سخت شدن دیباگ:
وقتی یه باگ پیش میاد، نمیدونین مشکل از تبدیل دادهست یا از لاجیک پروژه، چون همهچیز قاطی شده.
سخن اخر 🗣
پیادهسازی لاجیک پروژه تو سریالایزرهای DRF مثل اینه که بخوای با چاقو سوپ بخوری؛ میشه، ولی چرا؟! سریالایزرها برای تبدیل و اعتبارسنجی دادهها طراحی شدن، نه برای نگه داشتن لاجیک پیچیده. با انتقال لاجیک به مدلها یا سرویسها، کدتون تمیزتر، قابلنگهداریتر و حرفهایتر میشه. دفعه بعد که خواستین تو سریالایزر لاجیک بنویسین، یه لحظه وایسید و بگین: اینجا جای این کارا نیست 😊
#️⃣ #backend #drf #django #api
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
چی میشه وقتی یه ریکوئست به سرور میاد؟ ❓
تا حالا واست سوال شده وقتی کاربر دکمه «ثبتنام» رو میزنه، دقیقاً چی تو پشت صحنه اتفاق میافته؟ بریم قدمبهقدم ببینیم چه خبره
1⃣ کاربر درخواست میفرسته
2⃣ سرور درخواستو میگیره
3⃣ درخواست میره به سرویس
4⃣ ارتباط با دیتابیس
😀 پاسخ به مرورگر
البته که داستان به همین سادگی ها نیست و چیزی فراتر از اینه، ولی و من سعی کردم تا حد ممکن این فرآیند رو ساده تر توضیح بدم تا برای همه افراد قابل فهم باشه😄
جمعبندی📌
🧑💻 @CoolyCode
تا حالا واست سوال شده وقتی کاربر دکمه «ثبتنام» رو میزنه، دقیقاً چی تو پشت صحنه اتفاق میافته؟ بریم قدمبهقدم ببینیم چه خبره
کاربر فرم ثبتنامو پر میکنه و روی دکمه ثبت نام میزنه. مرورگر یه درخواست (Request) به آدرس /api/signup میفرسته، همراه با اطلاعاتی مثل ایمیل و پسورد.
اون درخواست میرسه به سرور.
اینجا یه چیز به اسم کنترلر هست که مسئول گرفتن درخواستهاست. (کنترلر یعنی همون جایی که درخواستها وارد میشن و به بخشهای بعدی پاس داده میشن.)
کنترلر درخواستو میفرسته به یه بخش به اسم سرویس. سرویس اونجاست که منطق اصلی اجرا میشه. چک میکنه ایمیل تکراری نباشه، پسورد رو هش میکنه و آماده ذخیره میشه.
سرویس یه دستور میفرسته به دیتابیس. «این کاربر جدیدو ذخیره کن!». دیتابیس هم اطلاعاتو ذخیره میکنه.
حالا سرور یه جواب برمیگردونه. یه پیام موفقیت (مثلاً 201 Created) یا یه توکن برای ورود. مرورگر هم نتیجه رو میگیره و همه چی تموم میشه.
البته که داستان به همین سادگی ها نیست و چیزی فراتر از اینه، ولی و من سعی کردم تا حد ممکن این فرآیند رو ساده تر توضیح بدم تا برای همه افراد قابل فهم باشه
#️⃣ #backend #api
جمعبندی
بکاند فقط چندتا روت نوشتن نیست.
بکاند یعنی بفهمی دقیقاً چه اتفاقی بین درخواست کاربر و پاسخ سرور میافته.
و این چرخه، قلب تپندهی هر اپلیکیشنه.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from TheAliBigdeli Channel
مدیریت خطا و پیامها
تو هر پروژهای خطا اجتنابناپذیره، مهم اینه چطور باهاش برخورد کنیم. اگه پیامها درست مدیریت نشن، هم کاربر گیج میشه، هم فرانت سختتر میتونه هندل کنه.
چند تا نکته به عنوان best practice:
- برای خطاها یه ساختار مشخص داشته باش تا فرانت بتونه راحت تشخیص بده با چه شرایطی طرفه.
- پیام برای کاربر باید ساده و قابل فهم باشه، نه پر از اصطلاحات فنی.
- جزئیات فنی و لاگها رو نگه دار برای بکاند و تیم فنی، نه برای کاربر.
- همیشه از پیامهای عمومی برای خطاهای پیشبینینشده استفاده کن (مثل "مشکلی پیش اومده، دوباره امتحان کن").
- خطاها رو دستهبندی کن (مثلاً خطای کاربر، خطای سرور، خطای دسترسی) تا بتونی راحتتر مدیریت کنی.
از مهمترین شرایطی که باید یک توسعه دهنده بک اند در API لحاظ کنه Custom Exception Handler هستش تا بتونه خطا ها رو با یک فرمت مناسب و یک دست پاسخ بده و این موضوع بر اساس کمپانی های مختلف متفاوت هستش ولی می تونین الگوی مناسبی رو از درونشون پیدا کنین.
مثلا داشتن کلید error در پیام و همچنین در ادامه status کد خطای اتفاق افتاده و همچنین جدا سازی detail و message که در یکی خطای توسعه و دیگری پیام قابل نمایش به کاربر قرار میگیره. در بعضی شرایط ممکنه حتی timestamp و اطلاعات بیشتری هم درج بشه مثلا code یا type که ممکنه شماره خطای خاص و یا کلید واژه مربوطه برای ردگیری خطای سریعتر باشه.
دیده میشه گاهی وقتا آدرس و یا حتی ورودی ها رو هم در بعضی سرویس ها نشون میدن که به نظرم جاش توی ریسپانس نیست و باید توی لاگ ها باشه و با این حال بعضی سرویس ها ارائه میدن.
نمونه Response مناسب برای خطا ها
رفرنس ها:
- https://zuplo.com/learning-center/best-practices-for-api-error-handling
- https://api7.ai/learning-center/api-101/error-handling-apis
- https://nordicapis.com/5-real-world-examples-of-great-api-error-messages/
- https://www.baeldung.com/rest-api-error-handling-best-practices
📢 @thealibigdeli_channel
#api_design
#api
تو هر پروژهای خطا اجتنابناپذیره، مهم اینه چطور باهاش برخورد کنیم. اگه پیامها درست مدیریت نشن، هم کاربر گیج میشه، هم فرانت سختتر میتونه هندل کنه.
چند تا نکته به عنوان best practice:
- برای خطاها یه ساختار مشخص داشته باش تا فرانت بتونه راحت تشخیص بده با چه شرایطی طرفه.
- پیام برای کاربر باید ساده و قابل فهم باشه، نه پر از اصطلاحات فنی.
- جزئیات فنی و لاگها رو نگه دار برای بکاند و تیم فنی، نه برای کاربر.
- همیشه از پیامهای عمومی برای خطاهای پیشبینینشده استفاده کن (مثل "مشکلی پیش اومده، دوباره امتحان کن").
- خطاها رو دستهبندی کن (مثلاً خطای کاربر، خطای سرور، خطای دسترسی) تا بتونی راحتتر مدیریت کنی.
از مهمترین شرایطی که باید یک توسعه دهنده بک اند در API لحاظ کنه Custom Exception Handler هستش تا بتونه خطا ها رو با یک فرمت مناسب و یک دست پاسخ بده و این موضوع بر اساس کمپانی های مختلف متفاوت هستش ولی می تونین الگوی مناسبی رو از درونشون پیدا کنین.
مثلا داشتن کلید error در پیام و همچنین در ادامه status کد خطای اتفاق افتاده و همچنین جدا سازی detail و message که در یکی خطای توسعه و دیگری پیام قابل نمایش به کاربر قرار میگیره. در بعضی شرایط ممکنه حتی timestamp و اطلاعات بیشتری هم درج بشه مثلا code یا type که ممکنه شماره خطای خاص و یا کلید واژه مربوطه برای ردگیری خطای سریعتر باشه.
دیده میشه گاهی وقتا آدرس و یا حتی ورودی ها رو هم در بعضی سرویس ها نشون میدن که به نظرم جاش توی ریسپانس نیست و باید توی لاگ ها باشه و با این حال بعضی سرویس ها ارائه میدن.
نمونه Response مناسب برای خطا ها
{
"error": {
"status": 404,
"code": "OBJECT_NOT_FOUND",
"message": "آبجکت مورد نظر یافت نشد",
"detail": "Object matching query does not exist.",
"timestamp": "2025-10-03T12:30:45Z"
}
}رفرنس ها:
- https://zuplo.com/learning-center/best-practices-for-api-error-handling
- https://api7.ai/learning-center/api-101/error-handling-apis
- https://nordicapis.com/5-real-world-examples-of-great-api-error-messages/
- https://www.baeldung.com/rest-api-error-handling-best-practices
📢 @thealibigdeli_channel
#api_design
#api
Forwarded from Gopher Academy
🔵 عنوان مقاله
JWT Authentication in Go with Gin
🟢 خلاصه مقاله:
این مقاله با رویکردی عملی نشان میدهد چگونه احراز هویت مبتنی بر JWT را در یک سرویس Go با فریمورک Gin پیادهسازی کنیم؛ هدف نمونه، کار با Vonage است اما الگوها در هر پروژه APIمحور قابل استفادهاند. نویسنده، Benjamin Aronov (Vonage)، ابتدا مزایای JWT و مفاهیم ادعاها، الگوریتمهای امضا و تفکیک توکنهای دسترسی و نوسازی را توضیح میدهد. سپس ساختار پیادهسازی را تشریح میکند: صدور توکن امن پس از تأیید اعتبار، میانافزار Gin برای اعتبارسنجی و تزریق کانتکست کاربر، محافظت از مسیرها، مدیریت خطاها و نگهداری کلیدها در متغیرهای محیطی. بخش امنیت بر انقضای کوتاه توکن دسترسی، چرخش Refresh Token، جلوگیری از سوءاستفاده، استفاده از HTTPS، ملاحظات CORS و محدودسازی نرخ و نیز لاگگذاری و چرخش کلیدها در محیط تولید تأکید دارد. در نهایت نشان میدهد چگونه با توکنهای کوتاهعمر و محدود به سطح دسترسی، تعاملات با Vonage (مانند پیام، صوت یا ویدئو) را ایمن کنیم. نتیجه، لایه احراز هویت منعطفی در Go و Gin است که فراتر از Vonage هم قابل استفاده است.
#Go #Gin #JWT #Authentication #Security #Golang #API #Vonage
🟣لینک مقاله:
https://golangweekly.com/link/175981/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
JWT Authentication in Go with Gin
🟢 خلاصه مقاله:
این مقاله با رویکردی عملی نشان میدهد چگونه احراز هویت مبتنی بر JWT را در یک سرویس Go با فریمورک Gin پیادهسازی کنیم؛ هدف نمونه، کار با Vonage است اما الگوها در هر پروژه APIمحور قابل استفادهاند. نویسنده، Benjamin Aronov (Vonage)، ابتدا مزایای JWT و مفاهیم ادعاها، الگوریتمهای امضا و تفکیک توکنهای دسترسی و نوسازی را توضیح میدهد. سپس ساختار پیادهسازی را تشریح میکند: صدور توکن امن پس از تأیید اعتبار، میانافزار Gin برای اعتبارسنجی و تزریق کانتکست کاربر، محافظت از مسیرها، مدیریت خطاها و نگهداری کلیدها در متغیرهای محیطی. بخش امنیت بر انقضای کوتاه توکن دسترسی، چرخش Refresh Token، جلوگیری از سوءاستفاده، استفاده از HTTPS، ملاحظات CORS و محدودسازی نرخ و نیز لاگگذاری و چرخش کلیدها در محیط تولید تأکید دارد. در نهایت نشان میدهد چگونه با توکنهای کوتاهعمر و محدود به سطح دسترسی، تعاملات با Vonage (مانند پیام، صوت یا ویدئو) را ایمن کنیم. نتیجه، لایه احراز هویت منعطفی در Go و Gin است که فراتر از Vonage هم قابل استفاده است.
#Go #Gin #JWT #Authentication #Security #Golang #API #Vonage
🟣لینک مقاله:
https://golangweekly.com/link/175981/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Vonage API Developer
JWT Authentication in Go with Gin
Secure JWT auth in Go with Gin: access/refresh tokens, HttpOnly cookies, Redis, and Vonage API.
Forwarded from Gopher Academy
🔵 عنوان مقاله
go-rest-api-example: Template for an Enterprise-Ready REST API Microservice
🟢 خلاصه مقاله:
پروژه go-rest-api-example یک قالب آماده برای ساخت Microserviceهای REST API در سطح Enterprise است. این Boilerplate با هدف راهاندازی سریع و استاندارد یک سرویس تولیدی ارائه شده و با نگهداری منظم بهروز میشود. نسخه این هفته با Go 1 یکپارچه شده تا با ابزارها و جریانهای کاری فعلی سازگار باشد و پایهای پایدار برای توسعه فراهم کند.
#Go #Golang #RESTAPI #Microservices #Boilerplate #Backend #API #SoftwareEngineering
🟣لینک مقاله:
https://golangweekly.com/link/176914/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go-rest-api-example: Template for an Enterprise-Ready REST API Microservice
🟢 خلاصه مقاله:
پروژه go-rest-api-example یک قالب آماده برای ساخت Microserviceهای REST API در سطح Enterprise است. این Boilerplate با هدف راهاندازی سریع و استاندارد یک سرویس تولیدی ارائه شده و با نگهداری منظم بهروز میشود. نسخه این هفته با Go 1 یکپارچه شده تا با ابزارها و جریانهای کاری فعلی سازگار باشد و پایهای پایدار برای توسعه فراهم کند.
#Go #Golang #RESTAPI #Microservices #Boilerplate #Backend #API #SoftwareEngineering
🟣لینک مقاله:
https://golangweekly.com/link/176914/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - rameshsunkara/go-rest-api-example: Production-ready Go REST APIs without the enterprise bloat
Production-ready Go REST APIs without the enterprise bloat - rameshsunkara/go-rest-api-example