Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
📕 کتاب REST API Design Rulebook

📌 فصل چهارم: Metadata Design

📍پارت: اول

#کتاب

💎 HTTP Headers 💎
توی درخواست و پاسخ‌های HTTP، یه سری اطلاعات متا (Metadata) از طریق هدرهای مختلف منتقل می‌شن. HTTP یه سری هدر استاندارد داره که بعضیاشون درباره منابع درخواست شده اطلاعات میدن. یه سری دیگه نشون میدن که چه نوع دیتایی توی پیام وجود داره. یه تعداد دیگه هم برای کنترل کش (Cache) استفاده میشن.

توی این متن کوتاه چندتا قانون مهم برای استفاده از هدرهای استاندارد HTTP توی طراحی REST API ها پیشنهاد شده.

⭕️ استفاده از Content-Type اجباریه
هدر Content-Type نوع داده‌ای که توی body درخواست یا پاسخ هست رو مشخص می‌کنه. مقدار این هدر یه رشته متنی با فرمت خاصه که بهش "Media Type" گفته میشه. سرور و کلاینت با استفاده از مقدار این هدر متوجه میشن چطوری باید بایت‌های موجود توی بدنه پیام رو پردازش کنن.

⭕️ استفاده از Content-Length توصیه میشه
هدر Content-Length اندازه بدنه پیام (entity-body) رو بر حسب بایت مشخص می‌کنه. این هدر توی پاسخ‌ها مهمه چون دو تا کار رو راحت می‌کنه:
اول اینکه کلاینت متوجه میشه که آیا تعداد بایت‌های درست رو خونده یا نه. دوم اینکه می‌تونه با یه درخواست HEAD بفهمه که اندازه بدنه پیام چقدره بدون اینکه نیاز باشه کل پیام رو دانلود کنه.

⭕️ استفاده از Last-Modified توی پاسخ‌ها توصیه میشه
هدر Last-Modified فقط توی پیام‌های پاسخ استفاده میشه. مقدار این هدر یه timestamp (زمان دقیق) هست که نشون میده آخرین باری که چیزی توی منابع تغییر کرده کی بوده. کلاینت و کش‌های میانی (Cache Intermediaries) می‌تونن از این هدر استفاده کنن تا بفهمن نسخه محلی‌شون از منبع به‌روز هست یا نه. این هدر باید همیشه توی پاسخ به درخواست‌های GET باشه.

⭕️ استفاده از ETag توی ریسپانس ها توصیه میشه
مقدار ETag یه رشته متنی غیرشفافه (opaque) که یه "نسخه" خاص از منبع (Resource) توی body ریسپانس رو شناسایی می‌کنه. body پیام HTTP شامل هدرها و body اصلی پیام میشه. مقدار ETag می‌تونه هر رشته‌ای باشه، به شرطی که وقتی نمایشی از منبع تغییر می‌کنه، مقدارش هم تغییر کنه. این هدر باید همیشه توی پاسخ به درخواست‌های GET ارسال بشه.

کلاینت‌ها می‌تونن مقدار هدر ETag رو ذخیره کنن تا توی درخواست‌های GET بعدی، ازش استفاده کنن؛ به عنوان مقدار هدر شرطی If-None-Match. اگه API تشخیص بده که ETag تغییر نکرده، می‌تونه از ارسال دوباره‌ی بدنه پیام صرف‌نظر کنه و در نتیجه توی زمان و پهنای باند صرفه‌جویی بشه.


@ninja_learn_ir

⭕️ store ها باید از درخواست‌های شرطی PUT پشتیبانی کنن
وقتی برای ذخیره یه منبع از متد PUT استفاده می‌کنه (چه برای ایجاد و چه به‌روزرسانی)، ممکنه برای API مشخص نباشه که درخواست کلاینت برای درج داده جدیده یا به‌روزرسانی. اینجاست که HTTP از طریق هدرها ابزار لازم رو در اختیار API میذاره تا این ابهام رو برطرف کنه. برای این کار، API باید به هدرهای شرطی کلاینت مثل If-Unmodified-Since یا If-Match متکی باشه تا منظور دقیق کلاینت رو بفهمه.

هدر If-Unmodified-Since از API می‌خواد که فقط در صورتی عملیات رو انجام بده که از زمانی که توی این هدر مشخص شده، وضعیت منبع تغییری نکرده باشه.

هدر If-Match یه مقدار ETag رو از کلاینت می‌گیره، که از پاسخ قبلی API ذخیره شده. اگه این مقدار ETag با وضعیت فعلی منبع مطابقت داشته باشه، API درخواست PUT رو انجام میده؛ وگرنه درخواست رو رد می‌کنه.

مثال برای درخواست‌های شرطی PUT

فرض کنیم دو کلاینت (کلاینت#1 و کلاینت#2) از یه منبع ذخیره‌ی API با آدرس /objects برای اشتراک‌گذاری اطلاعات استفاده می‌کنن.

کلاینت#1 یه درخواست PUT می‌فرسته تا یه داده جدید توی مسیر /objects/2113 ذخیره کنه. این مسیر قبلاً توی API وجود نداشته، پس API این درخواست رو به‌عنوان "ایجاد" (Insert) تفسیر می‌کنه، منبع جدید رو می‌سازه و با کد 201 ("Created") پاسخ میده.

چند وقت بعد، کلاینت#2 درخواست PUT برای همون مسیر (/objects/2113) می‌فرسته. حالا API این مسیر رو به یه منبع موجود متصل می‌کنه. اما چون اطلاعات کافی نداره که بفهمه آیا کلاینت#2 می‌خواد داده‌ی قبلی رو به‌روزرسانی کنه یا نه، درخواست رو با کد 409 ("Conflict") رد می‌کنه و باید توی بدنه پاسخ هم یه توضیح از خطا بده.

@ninja_learn_ir
persian_Grokking_Algorithms_An_illustrated_guide_for_programmers.pdf
24.5 MB
نسخه فارسی و انگلیسی پست بالا، امیدوارم بخونید و لذت ببرید 🔥
به پاس روز آزادی نرم افزار و همینطور رخ دادن حاشیه‌های اخیر در فضای مجازی، ما برگذار کنندگان دورهمی پارچ و ارائه‌دهندگان بیانیه‌ای را مرتبط با حریم خصوصی آماده کردیم.

https://meetup.parchlinux.com/statements/statement.html


@ParchLinux
ارائه‌های دورهمی پارچ

🔗 پلی‌لیست پیرتوب

به زودی در یوتوب هم بارگذاری می‌شود.

@ParchLinux
Please open Telegram to view this post
VIEW IN TELEGRAM
اندرمن changed their name to Disabled
یه ابزار خفن اوردم براتون که واقعا جادوییه، اسمش magicui هستش، یک مخزن بزرگ از کامپوننت های انیمیت شده که بهتون قول میدم اگر ببینیدش شما هم مجذوبشون میشید بس که جذابه
یه ابزار خفن اوردم براتون که واقعا جادوییه، اسمش magicui هستش، یک مخزن بزرگ از کامپوننت های انیمیت شده که بهتون قول میدم اگر ببینیدش شما هم مجذوبشون میشید بس که جذابه
Forwarded from کانال مهرداد لینوکس (Mehrdad Linux)
با همه حرف و حدیث ها بالاخره Redict 7.3.0, یک copyleft فورک مستقل از Redis تحت لایسنس LGPL-3.0-only آماده استفاده شد
نرم افزار Redict یک distributed key/value store است
تشکر ويژه از جامعه نرم افزار های آزاد و متن باز FOSS
"Free and open-source software" (FOSS)
گزینه های دیگر
1 : Valkey - move-from-redis-to-valkey

https://valkey.io/
نرم افزار valkey تحت حمایت است
Forwarded from Armon technical logs (armon Taheri)
شاید اگر زود تر با این منابع آشنا میشدم مسیر شغلی متفاوت تری رو طی میکردم( لیست اپدیت خواهد شد)
https://youtube.com/@gozineh5
https://youtube.com/@kooshiar
https://youtube.com/@kargahnet
https://t.iss.one/ertiad
https://t.iss.one/loc0m0
https://www.instagram.com/1000jobs.ir
پادکست هایی میلاد نوری مهمان هست
https://youtube.com/@ordmenpodcast
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 تعداد سکه کاربران همستری محاسبه شد.

برای من تعداد سکه ۸۹۶ تا شد که مفت نمیارزه!

@TheRaymondDev
Forwarded from Codino School (ایمان غفوری)
دستور check:import هم cache دار شد!

🔅 در نسخه جدید میکروسکوپ برای دستور check:import یک لایه cache هم بالاخره اضافه شد.
معمایی که بعد از چند سال بالاخره برام حل شد!

◾️ این که چطور می‌تونم برای این دستور کش پیاده کنم به طوری که دقت و صحت نتایج نمایش داده شده تحت شعاع قرار نگیره.

◾️ و فکر نکنید که نتایج دقیق کار آسونی هست. با استفاده از laravel/pint پروژه خودمونو اسکن کردم ولی در نهایت که ۹۰ مورد import بلا استفاده رو نتونست تشخیص بده.
بماند که ایمپورت های غلط رو هم به کلی نمی‌تونه تشخیص بده.
php artisan check:import --folder=app/Models


🔗 github.com/imanghafoori/microscope

🔬🔬🔬

@codino
Forwarded from Codino School (ایمان غفوری)
CallbackController.php
2 KB
▪️این داستان: Repository Pattern

🤔 صورت مساله:
فرض کنید می‌خواهیم این فایل رو ریفکتور کنیم و ریپازیتوری پترن رو براش به کار ببریم.

(گر چه مثال ساده ای هست ولی موارد پیچیده تر رو هم با همین فرمون میشه رفت جلو)

🔅 پاسخ تشریحی در قسمت نظرات 👇👇👇

@codino
Forwarded from Codino School (ایمان غفوری)
صدای خواب آلوده و خسته بنده رو پذیرا باشید.
وسع و بضاعت ما تازگیا محدود شده

نکاتی در مورد Repository Pattern که به شما نمی گویند.

@codino
Forwarded from ASafaeirad
FP vs Structured Programming
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 لیست مخزن ها برای کالی لینوکس (بدون تحریم)

deb https://ftp.halifax.rwth-aachen.de/kali/ kali-rolling main contrib non-free
deb https://ftp.halifax.rwth-aachen.de/kali/ kali-experimental main contrib non-free
deb-src https://ftp.halifax.rwth-aachen.de/kali/ kali-experimental main contrib non-free
deb-src https://ftp.halifax.rwth-aachen.de/kali/ kali-rolling main contrib non-free
deb https://ftp.halifax.rwth-aachen.de/kali/ kali-bleeding-edge main contrib non-free


لیست بالا به مسیر زیر اضافه کنید.

sudo nano /etc/apt/sources.list 


#لینوکس

@TheRaymondDev
Forwarded from Linuxor ?
برای تونل کردن هی نیا اول کامندات بنویس proxychains با دستور زیر کل ترمینال فعلیت رو تونل کن.

proxychains -q bash

اگه خواستین از تونل در هم بیاین کافیه دستور exit رو بزنید


پ.ن : ابزار proxychains باهاش میشه یه برنامه رو از پشت پروکسی socks یا http تونل کرد.

🐧 @Linuxor
Forwarded from Gopher Academy
🔵 عنوان مقاله
Go is Not Java

🟢 خلاصه مقاله:
مقاله بحث می‌کند که برخلاف تصور رایج، زبان برنامه‌نویسی Go ممکن است در واقع خصوصیات شی‌گرایی را بهتر از زبان‌های برنامه‌نویسی Java و C++ پیاده‌سازی کرده باشد. این استدلال براساس نظرات خالق مفهوم شی‌گرایی مطرح شده است. مقاله تاکید دارد که مفهوم شی‌گرا بیشتر به چگونگی کپسوله‌سازی داده‌ها، به ارمغان آوردن کد قابل استفاده‌ مجدد و ایجاد واسط‌های فراگیر برای اشیاء مربوط می‌شود، و این که زبان Go توانسته است این خصوصیات را به شیوه‌ای کارآمد فراهم آورد. نویسنده با اشاره به تفاوت‌های موجود بین Go و سایر زبان‌های برنامه‌نویسی معروف در پیاده‌سازی شی‌گرایی، چگونگی برتری Go را توضیح داده است. این مقاله می‌تواند دیدگاهی جدید به برنامه‌نویسان برای انتخاب زبان مناسب برای پروژه‌های آینده خود بدهد.

🟣لینک مقاله:
https://blog.vertigrated.com/go-is-not-java


👑 @gopher_academy