<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حسام اثنی عشری</title>
        <link>https://virgool.io/feed/@hesamasna</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-18 09:49:02</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1963413/avatar/dafvKl.jpg?height=120&amp;width=120</url>
            <title>حسام اثنی عشری</title>
            <link>https://virgool.io/@hesamasna</link>
        </image>

                    <item>
                <title>KONG API GATEWAY</title>
                <link>https://virgool.io/@hesamasna/kong-api-gateway-d9fvmiir63pp</link>
                <description>KONG LOGOKong Official WebsiteKong Githubمعرفی Kong gatewayکونگ یک api gateway می باشد که برای hybrid و multi cloud ساخته شده و قابل استفاده در انواع میکروسرویس ها و معماری های توزیعی است. کونگ ابزاری cloud-native بسیار سبک، سریع و انعطاف پذیر است. این api-gateway یک پروکسی معکوس است که امکان مدیریت، پیکربندی و مسیریابی درخواست ها را به api می دهد. Kong Gateway در مقابل هر API RESTful اجرا می شود و می تواند از طریق ماژول ها و افزونه ها گسترش یابد. این برای اجرا بر روی معماری های غیر متمرکز، از جمله استقرار hybrid-cloud و multi-cloud طراحی شده است. با استفاده از کونگ، کاربر می تواند:از اتوماسیون گردش کار و شیوه های مدرن GitOps استفاده کندعدم تمرکز برنامه ها/سرویس و انتقال به میکروسرویس هایک اکوسیستم توسعه دهنده API پر رونق ایجاد کندناهنجاری ها و تهدیدات مرتبط با API را به طور فعال شناسایی کند -API ها/سرویس ها را ایمن و کنترل کند و دید API را در کل سازمان بهبود بخشد.گسترش Kong gatewayKong Gateway یک برنامه Lua است که در Nginx اجرا می شود. Kong Gateway همراه با OpenResty توزیع شده است که مجموعه ای از ماژول ها است که ماژول lua-nginx را گسترش می دهد.این مجموعه برای معماری ماژول تنظیم می‌کند، جایی که پلاگین‌ها را می‌توان در زمان اجرا فعال و اجرا شوند. Kong Gateway در هسته خود انتزاعی از پایگاه داده، مسیریابی و مدیریت پلاگین را پیاده سازی می کند. پلاگین ها می توانند در کد جداگانه و مجزا فعال باشند و در هر جایی به request lifecycle تزریق شوند، همه این موارد تنها با چند خط کد ساده عملی می شود.Kong پلاگین های زیادی را برای کاربر فراهم می کند تا در استقرار Gateway خود از آنها استفاده کند. کاربر همچنین می تواند پلاگین های سفارشی خود را ایجاد کند.مقایسه ویژگی های نسخه هاابزار Kong api gateway به صورت رایگان و open source در دسترس همگان قرار دارد اما نسخه های پولی و شرکتی آن امکاناتی افزون ارائه می کند که به بررسی این موارد می پردازیم:هر دو نسخه ویژگی های ساختاری سبک بودن و سرعت بالا و cloud-native بودن را پوشش می دهند و همچنین هر دو قابلیت ورود به controller ابزار کوبرنتیس را هم دارند اما در نسخه پولی شاهد gateway mocking و در صفحه مدیریت کونگ، admin gui هستیم که نسخه رایگان فاقد این دو است. هر دو نسخه می توانند ترافیک پلاگین ها را کنترل کنند و gRPC Transformations و Simple Data Transformations را در اختیار کاربر می گذارند. از جمله ویژگی های دیگر پیاده سازی سیستم احراز هویت (Authentication) و امکانات دیگری نظیر Bot Detection, CORS controls, ACLs می توان نام برد.اما امکاناتی نظیر api analysis, performance tuning, Enterprise support مختص به نسخه پولی این ابزار است.پرتال ها-&gt; Kong AdminKong Admin API یک رابط RESTful برای مدیریت و پیکربندی خدمات، مسیرها، پلاگین ها و مصرف کنندگان ارائه می دهد. تمام کارهایی که می‌توانید در مقابل gateway انجام دهید، می‌توانند با استفاده از Kong Admin API خودکار شوند. اگر Kong را در حالت ساده اجرا شود، افزایش ترافیک می تواند منجر به عملکرد بالقوه با Kong Proxy شود. مرتب‌ سازی سمت سرور و فیلتر کردن مقادیر زیادی از موجودیت‌ها نیز باعث افزایش استفاده از CPU در CP و پایگاه داده Kong می‌شود. Kong Manager رابط کاربری گرافیکی (GUI) برای Kong Gateway است. برای مدیریت و کنترل Kong Gateway از Kong Admin API در زیر Hood استفاده می شود. امکانات Kong manager :ساخت مسیر ها و سرویس های جدیدفعال یا غیر فعال کردن پلاگین ها به راحتی تنها با چند کلیکتیم ها، خدمات، پلاگین ها، مدیریت مشتری ها و هر چیز دیگری را دقیقاً همانطور که کاربر بخواهد گروه بندی می کند.مانیتور کردن و رصد مداوم : با استفاده از داشبوردهای بصری و قابل تنظیم، سلامت cluster-wide، workspace-level یا object-level را میسر است.-&gt; Kong DevKong Dev Portal برای معرفی برنامه‌نویس‌های جدید و تولید اسناد API، ایجاد صفحات سفارشی، مدیریت نسخه‌های API و دسترسی ایمن به برنامه‌نویس‌ها استفاده می‌شود.برخی مفاهیم در KongKong VitalsKong Vitals معیارهای مفیدی را در مورد سلامت و عملکرد node های Kong Gateway و همچنین معیارهایی در مورد استفاده از API های پروکسی ارائه می دهد. کاربر می تواند به صورت بصری علائم حیاتی را رصد کند و ناهنجاری ها را در زمان واقعی مشخص کند، و از تجزیه و تحلیل API بصری استفاده کند تا ببینید دقیقاً چگونه API ها و Gateway عملکرد دارند و به آمارهای کلیدی دسترسی پیدا کند. Kong Vitals بخشی از رابط کاربری Kong Manager است.KubernetesKong Gateway می تواند به صورت بومی در Kubernetes با ingress controller سفارشی شده، Helm chart و Operator خود اجرا شود.کنترلر ورودی Kubernetes یک پروکسی است که سرویس های Kubernetes را از برنامه های کاربردی (به عنوان مثال، Deployments، ReplicaSets) در حال اجرا در یک Kubernetes cluster در کلاینت در حال اجرا cluster قرار می دهد. هدف یک کنترل کننده ورودی این است که یک نقطه کنترل واحد برای تمام ترافیک ورودی به Kubernetes فراهم کند.Insomniaبا Insomnia، سازمان‌ها می‌توانند با استفاده از تست خودکار، همگام‌سازی مستقیم Git و بازرسی انواع پاسخ‌ها، روند طراحی و آزمایش را تسریع بخشند. تیم‌ها در هر اندازه می‌توانند از Insomnia برای افزایش سرعت توسعه، کاهش خطر استقرار و افزایش همکاری استفاده کنند.DecKdecK به مدیریت پیکربندی Kong Gateway به شکلی اعلامی کمک می کند. این بدان معناست که یک توسعه‌ دهنده می‌تواند وضعیت دلخواه Kong Gateway یا Konnect - سرویس‌ها، مسیرها، پلاگین‌ها و موارد دیگر- را تعریف کند و به decK اجازه دهد بدون نیاز به اجرای دستی هر مرحله، همانطور که با Kong Admin API انجام می دهد، پیاده‌ سازی را انجام دهد.Servicesدر Kong Gateway، یک سرویس موجودیتی است که یک API یا میکروسرویس خارجی upstream را نشان می‌دهد. به عنوان مثال، یک میکروسرویس تبدیل داده، یک API صورتحساب و غیره. ویژگی اصلی یک سرویس URL آن است. شما می توانید URL را با یک رشته یا با تعیین پروتکل، میزبان، پورت و مسیر آن به صورت جداگانه مشخص کنید. سرویس ها، همراه با مسیرها(Routes)، به شما امکان می دهد سرویس های خود را با Kong Gateway در کلاینت قرار دهید. Kong Gateway با استفاده از مسیرها، خدمات را از مشتریان انتزاعی می کند. از آنجایی که مشتری همیشه مسیر را فرا می‌خواند، تغییرات در سرویس‌ها (مانند نسخه‌سازی) بر نحوه برقراری تماس توسط مشتریان تأثیری ندارد. مسیرها همچنین امکان استفاده از یک سرویس را توسط چندین مشتری و اعمال سیاست های متفاوت بر اساس مسیر مورد استفاده را فراهم می کنند.Routeمسیرها تعیین می کنند که چگونه (و اگر) درخواست ها پس از رسیدن به Kong gateway به سرویس های آنها ارسال شود. در جایی که یک سرویس نشان دهنده API بک اند است، یک مسیر آنچه را که در کلاینت قرار می گیرد، تعریف می کند.یک سرویس واحد می تواند مسیرهای زیادی داشته باشد. هنگامی که یک مسیر مطابقت داشت، Kong Gateway درخواست را به سرویس مرتبط خود پراکسی می کند.Routes، همراه با سرویس ها به کاربر امکان می دهد سرویس خود را در کلاینت برنامه های کاربردی با Kong Gateway قرار دهد. Kong Gateway با استفاده از مسیرها، سرویس را از برنامه‌ ها انتزاع می‌کند. از آنجایی که برنامه همیشه از مسیر برای ارسال درخواست استفاده می‌کند، تغییرات در سرویس‌ها، مانند نسخه‌سازی، بر نحوه درخواست برنامه‌ها تأثیری ندارد. مسیرها همچنین امکان استفاده از یک سرویس را توسط چندین برنامه کاربردی فراهم می‌کنند و سیاست‌های متفاوتی را بر اساس مسیر مورد استفاده اعمال می‌کنند.UpstreamUpstream به یک API، برنامه یا میکرو سرویس اشاره دارد که Kong Gateway درخواست ها را به آن ارسال می کند. در Kong Gateway، یک شی upstream یک نام میزبان مجازی را نشان می‌دهد و می‌تواند برای بررسی سلامت، قطع مدار، و بارگذاری درخواست‌های ورودی از طریق چندین سرویس استفاده شود.Pluginsپلاگین ها عملکرد پیشرفته ای را ارائه می دهند و استفاده از Kong gateway را گسترش می دهند، که به شما امکان می دهد ویژگی های جدیدی را به پیاده سازی خود اضافه کنید. پلاگین ها را می توان به گونه ای پیکربندی کرد که در زمینه های مختلف اجرا شوند، از یک مسیر خاص تا همه upstream ها، و می توانند اقداماتی را در داخل Kong قبل یا بعد از پروکسی شدن درخواست به API upstream و همچنین در هر پاسخ ورودی انجام دهند.راه اندازی هاهمانطور که پیش تر گفته شد، Kong یک API gateway cloud-native سبک، سریع و انعطاف پذیر است. Kong Gateway در مقابل برنامه های کاربردی سرویس قرار دارد و به صورت پویا درخواست ها و پاسخ ها را کنترل، تجزیه و تحلیل و مسیریابی می کند. Kong Gateway سیاست‌های ترافیک API را با استفاده از رویکردی انعطاف‌ پذیر، کم‌ کد و مبتنی بر پلاگین پیاده‌سازی می‌کند.پیش نیاز هاDocker : برای اجرای Kong Gateway و پشتیبانی از پایگاه داده به صورت محلی استفاده می شود.Curl : برای ارسال درخواست به دروازه کنگ استفاده می شود. curl روی اکثر سیستم ها از قبل نصب شده است.Jq : برای پردازش پاسخ های JSON در خط دستور استفاده می شود. اگرچه این ابزار مفید است، اما برای تکمیل وظایف این آموزش ضروری نیست.-&gt; گام نخست :راه اندازی Kong gateway با اسکریپت quickstart :curl -Ls https://get.konghq.com/quickstart | bashاین اسکریپت کانتینرهای Docker را برای Kong Gateway و پایگاه داده پشتیبانی PostgreSQL اجرا می کند. این اسکریپت همچنین یک شبکه Docker برای آن کانتینرها ایجاد می کند تا از طریق آنها ارتباط برقرار کنند-&gt; گام دوم :Kong Gateway یک API Admin را در درگاه پیش‌فرض 8001 ارائه می‌کند. Admin API می‌تواند هم برای پرس و جو و هم برای کنترل وضعیت Kong Gateway استفاده شود. دستور زیر Admin API را پرس و جو می کند و header را واکشی می کندcurl --head localhost:8001اگر دروازه Kong به درستی اجرا شود، با یک کد HTTP 200 پاسخ می دهد، شبیه به زیر:HTTP/1.1 200 OK
Date: Mon, 22 Aug 2022 19:25:49 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Content-Length: 11063
X-Kong-Admin-Latency: 6
Server: kong/3.1.x-&gt; گام سوم :مسیر اصلی Admin API اطلاعات مهمی را در مورد Kong gateway در حال اجرا از جمله اطلاعات شبکه، امنیت و افزونه ارائه می دهد. پیکربندی کامل در کلید پیکربندی سند JSON برگشتی ارائه شده است.curl -s localhost:8001 | jq &#039;.configuration&#039;کاربر باید یک پاسخ JSON بزرگ با اطلاعات پیکربندی Kong Gateway دریافت کند.راه اندازی سرویس ها و مسیر هادر Kong Gateway، یک سرویس انتزاعی از یک برنامه upstream موجود است. سرویس‌ها می‌توانند مجموعه‌ ای از اشیاء مانند پیکربندی‌های افزونه و خط‌مشی‌ها را ذخیره کنند و می‌توانند با مسیرها مرتبط شوند.-&gt; سرویس : هنگام تعریف یک سرویس، مدیر یک نام و اطلاعات اتصال برنامه upstream را ارائه می دهد. جزئیات اتصال را می توان در فیلد url به صورت یک رشته یا با ارائه مقادیر جداگانه برای protocol ، host ، port و مسیر به صورت جداگانه ارائه کرد. سرویس های ارتباط یک به چند با برنامه های upstream دارند که به مدیران اجازه می دهد تا رفتارهای مدیریت ترافیک پیچیده ای ایجاد کنند.-&gt; مسیر: Route مسیری است به یک منبع در یک برنامه Upstream. مسیرها به سرویس ها اضافه می شوند تا امکان دسترسی به برنامه اصلی را فراهم کنند. در Kong Gateway، مسیرها معمولاً به endpoint هایی که از طریق برنامه Kong Gateway در کلاینت قرار می‌گیرند، نگاشت می‌شوند. مسیرها همچنین می‌توانند قوانینی را تعریف کنند که درخواست‌ها را با سرویس‌های مرتبط مطابقت دهد. به همین دلیل، یک مسیر می تواند به چندین endpoint اشاره کند. یک مسیر اصلی باید نام، مسیر یا مسیر هایی داشته باشد و به یک سرویس موجود اشاره کند. با استفاده از مسیر، می توان موارد دیگری را نیز تنظیم کرد. به عنوان مثال :Protocols : پروتکلی که برای ارتباط با برنامه بالادستی استفاده می شود.Hosts: لیست دامنه هایی که با یک مسیر مطابقت دارندMethods: روش‌های HTTP که با یک مسیر مطابقت دارندHeaders: لیستی از مقادیری که در سرصفحه یک درخواست انتظار می رودRedirect status codes: کدهای وضعیت HTTPSTags: مجموعه اختیاری از رشته ها برای گروه بندی مسیرهادر ادامه مدیریت و آزمایش سرویس ها و مسیرها را با استفاده از Kong Gateway Admin API خواهیم داشت. Kong Gateway همچنین گزینه های دیگری را برای مدیریت پیکربندی از جمله Kong Kong Konnect و decK ارائه می دهد.پس از نصب و راه اندازی خود Kong، مدیریت سرویس ها را شروع می کنیم:در مرحله اول سرویس را می سازیم و درخواست POST را به سمت ادمین کونگ ارسال می کنیم :curl -i -s -X POST http://localhost:8001/services \
  --data name=example_service \
  --data url=&#039;http://mockbin.org&#039;اگر درخواست موفقیت آمیز بود و پاسخ ۲۰۱ دریافت کردیم، خواهیم داشت :{
  &amp;quothost&amp;quot: &amp;quotmockbin.org&amp;quot,
  &amp;quotname&amp;quot: &amp;quotexample_service&amp;quot,
  &amp;quotenabled&amp;quot: true,
  &amp;quotconnect_timeout&amp;quot: 60000,
  &amp;quotread_timeout&amp;quot: 60000,
  &amp;quotretries&amp;quot: 5,
  &amp;quotprotocol&amp;quot: &amp;quothttp&amp;quot,
  &amp;quotpath&amp;quot: null,
  &amp;quotport&amp;quot: 80,
  &amp;quottags&amp;quot: null,
  &amp;quotclient_certificate&amp;quot: null,
  &amp;quottls_verify&amp;quot: null,
  &amp;quotcreated_at&amp;quot: 1661346938,
  &amp;quotupdated_at&amp;quot: 1661346938,
  &amp;quottls_verify_depth&amp;quot: null,
  &amp;quotid&amp;quot: &amp;quot3b2be74e-335b-4f25-9f08-6c41b4720315&amp;quot,
  &amp;quotwrite_timeout&amp;quot: 60000,
  &amp;quotca_certificates&amp;quot: null
}به فیلدهایی که به صراحت در درخواست ایجاد ارائه نشده اند، به طور خودکار یک مقدار پیش فرض بر اساس پیکربندی فعلی Kong Gateway داده می شود.در مرحله دوم، هنگامی که یک سرویس ایجاد می کنید، Kong Gateway یک شناسه منحصر به فرد را همانطور که در پاسخ بالا نشان داده شده است به آن اختصاص می دهد. فیلد شناسه یا نامی که هنگام ایجاد سرویس ارائه می‌شود، می‌تواند برای شناسایی سرویس در درخواست‌های بعدی استفاده شود. این URL سرویس است و به شکل /services/{service name or id} است. برای مشاهده وضعیت فعلی یک سرویس، یک درخواست GET به URL سرویس ارسال می کنیم:curl -X GET http://localhost:8001/services/example_serviceیک درخواست موفق شامل پیکربندی فعلی سرویس در بدنه پاسخ خواهد بود و چیزی شبیه به قطعه زیر خواهد بود:{
  &amp;quothost&amp;quot: &amp;quotmockbin.org&amp;quot,
  &amp;quotname&amp;quot: &amp;quotexample_service&amp;quot,
  &amp;quotenabled&amp;quot: true,
  ...
}در مرحله سوم، تنظیمات سرویس موجود را می توان با ارسال یک درخواست PATCH به URL سرویس به صورت پویا به روز کرد. برای تنظیم پویا تلاش های مجدد سرویس از 5 به 6، این درخواست PATCH را ارسال می کنیم:curl --request PATCH \
  --url localhost:8001/services/example_service \
  --data retries=6بدنه پاسخ شامل پیکربندی کامل سرویس از جمله مقدار به روز شده است:{
  &amp;quothost&amp;quot: &amp;quotmockbin.org&amp;quot,
  &amp;quotname&amp;quot: &amp;quotexample_service&amp;quot,
  &amp;quotenabled&amp;quot: true,
  &amp;quotretries&amp;quot: 6,
  ...
}و در نهایت مرحله اخر، شما می توانید با ارسال یک درخواست GET به آدرس پایگاه / سرویس ها، تمام خدمات فعلی را فهرست کنید.curl -X GET http://localhost:8001/servicesحال به مدیریت مسیر ها می رسیم:در گام نخست مسیر ها را می سازیم. مسیرها نحوه پروکسی شدن درخواست ها توسط Kong Gateway را مشخص می کنند. می توانیم با ارسال یک درخواست POST به URL سرویس، مسیری مرتبط با یک سرویس خاص ایجاد می کنیم:curl -i -X POST http://localhost:8001/services/example_service/routes \
  --data &#039;paths[]=/mock&#039; \
  --data name=example_routeاگر عملیات موفق بود با دریافت کد ۲۰۱ خواهیم داشت:{
  &amp;quotpaths&amp;quot: [
    &amp;quot/mock&amp;quot
  ],
  &amp;quotmethods&amp;quot: null,
  &amp;quotsources&amp;quot: null,
  &amp;quotdestinations&amp;quot: null,
  &amp;quotname&amp;quot: &amp;quotexample_route&amp;quot,
  &amp;quotheaders&amp;quot: null,
  &amp;quothosts&amp;quot: null,
  &amp;quotpreserve_host&amp;quot: false,
  &amp;quotregex_priority&amp;quot: 0,
  &amp;quotsnis&amp;quot: null,
  &amp;quothttps_redirect_status_code&amp;quot: 426,
  &amp;quottags&amp;quot: null,
  &amp;quotprotocols&amp;quot: [
    &amp;quothttp&amp;quot,
    &amp;quothttps&amp;quot
  ],
  &amp;quotpath_handling&amp;quot: &amp;quotv0&amp;quot,
  &amp;quotid&amp;quot: &amp;quot52d58293-ae25-4c69-acc8-6dd729718a61&amp;quot,
  &amp;quotupdated_at&amp;quot: 1661345592,
  &amp;quotservice&amp;quot: {
    &amp;quotid&amp;quot: &amp;quotc1e98b2b-6e77-476c-82ca-a5f1fb877e07&amp;quot
  },
  &amp;quotresponse_buffering&amp;quot: true,
  &amp;quotstrip_path&amp;quot: true,
  &amp;quotrequest_buffering&amp;quot: true,
  &amp;quotcreated_at&amp;quot: 1661345592
}در قدم دوم، مانند سرویس‌ها، وقتی مسیری را ایجاد می‌کنیم، Kong Gateway یک شناسه منحصربه‌فرد به آن اختصاص می‌دهد که در پاسخ بالا نشان داده شده است. فیلد id یا نام ارائه شده هنگام ایجاد مسیر، می تواند برای شناسایی مسیر در درخواست های بعدی استفاده شود. URL مسیر می تواند یکی از شکل های زیر باشد:/services/{service name or id}/routes/{route name or id}

/routes/{route name or id}برای مشاهده وضعیت کافی است درخواست GET ارسال شود:curl -X GET http://localhost:8001/services/example_service/routes/example_routeکه پاسخی مشابه پاسخ زیر را می بایست دریافت کنیم:{
  &amp;quotpaths&amp;quot: [
    &amp;quot/mock&amp;quot
  ],
  &amp;quotmethods&amp;quot: null,
  &amp;quotsources&amp;quot: null,
  &amp;quotdestinations&amp;quot: null,
  &amp;quotname&amp;quot: &amp;quotexample_route&amp;quot,
  &amp;quotheaders&amp;quot: null,
  &amp;quothosts&amp;quot: null,
  &amp;quotpreserve_host&amp;quot: false,
  &amp;quotregex_priority&amp;quot: 0,
  &amp;quotsnis&amp;quot: null,
  &amp;quothttps_redirect_status_code&amp;quot: 426,
  &amp;quottags&amp;quot: null,
  &amp;quotprotocols&amp;quot: [
    &amp;quothttp&amp;quot,
    &amp;quothttps&amp;quot
  ],
  &amp;quotpath_handling&amp;quot: &amp;quotv0&amp;quot,
  &amp;quotid&amp;quot: &amp;quot189e0a57-205a-4f48-aec6-d57f2e8a9985&amp;quot,
  &amp;quotupdated_at&amp;quot: 1661347991,
  &amp;quotservice&amp;quot: {
    &amp;quotid&amp;quot: &amp;quot3b2be74e-335b-4f25-9f08-6c41b4720315&amp;quot
  },
  &amp;quotresponse_buffering&amp;quot: true,
  &amp;quotstrip_path&amp;quot: true,
  &amp;quotrequest_buffering&amp;quot: true,
  &amp;quotcreated_at&amp;quot: 1661347991
}در مرحله سوم، مانند سرویس ها، مسیرها را می توان با ارسال یک درخواست PATCH به URL مسیر به صورت پویا به روز کرد.Tag ها مجموعه ای اختیاری از رشته ها هستند که می توانند با مسیر گروه بندی و فیلتر کردن مرتبط شوند. شما می توانید با ارسال یک درخواست PATCH به نقطه پایانی سرویس ها و تعیین یک مسیر، Tag ها را اختصاص دهید. دستورات به روز رسانی :curl --request PATCH \
  --url localhost:8001/services/example_service/routes/example_route \
  --data tags=&amp;quottutorial&amp;quotو در نهایت Admin API همچنین از لیست تمام مسیرهایی که در حال حاضر پیکربندی شده اند پشتیبانی می کند:curl http://localhost:8001/routesاین درخواست یک کد وضعیت HTTP 200 و یک آرایه پاسخ JSON را با همه مسیرهای پیکربندی شده در این نمونه Kong gateway برمی گرداند. پاسخ باید به شکل زیر باشد:{
  &amp;quotnext&amp;quot: null,
  &amp;quotdata&amp;quot: [
    {
      &amp;quotpaths&amp;quot: [
        &amp;quot/mock&amp;quot
      ],
      &amp;quotmethods&amp;quot: null,
      &amp;quotsources&amp;quot: null,
      &amp;quotdestinations&amp;quot: null,
      &amp;quotname&amp;quot: &amp;quotexample_route&amp;quot,
      &amp;quotheaders&amp;quot: null,
      &amp;quothosts&amp;quot: null,
      &amp;quotpreserve_host&amp;quot: false,
      &amp;quotregex_priority&amp;quot: 0,
      &amp;quotsnis&amp;quot: null,
      &amp;quothttps_redirect_status_code&amp;quot: 426,
      &amp;quottags&amp;quot: [
        &amp;quottutorial&amp;quot
      ],
      &amp;quotprotocols&amp;quot: [
        &amp;quothttp&amp;quot,
        &amp;quothttps&amp;quot
      ],
      &amp;quotpath_handling&amp;quot: &amp;quotv0&amp;quot,
      &amp;quotid&amp;quot: &amp;quot52d58293-ae25-4c69-acc8-6dd729718a61&amp;quot,
      &amp;quotupdated_at&amp;quot: 1661346132,
      &amp;quotservice&amp;quot: {
        &amp;quotid&amp;quot: &amp;quotc1e98b2b-6e77-476c-82ca-a5f1fb877e07&amp;quot
      },
      &amp;quotresponse_buffering&amp;quot: true,
      &amp;quotstrip_path&amp;quot: true,
      &amp;quotrequest_buffering&amp;quot: true,
      &amp;quotcreated_at&amp;quot: 1661345592
    }
  ]
}محدود سازی درخواست هامحدودیت نرخ برای کنترل نرخ درخواست های ارسال شده به یک سرویس upstream استفاده می شود. می توان از آن برای جلوگیری از حملات DoS، محدود کردن خراش وب و سایر اشکال استفاده بیش از حد استفاده کرد. بدون محدودیت نرخ، مشتریان دسترسی نامحدودی به خدمات upstream دارند که ممکن است بر در دسترس بودن تأثیر منفی بگذارد.برای فعال سازی پلاگین محدود سازی، مطابق دستورات پیش می رویم:افزونه محدود کننده نرخ به طور پیش‌فرض روی Kong Gateway نصب می‌شود و می‌توان آن را با ارسال یک درخواست POST به شی پلاگین در Admin API فعال کرد:curl -i -X POST http://localhost:8001/plugins \
  --data name=rate-limiting \
  --data config.minute=5 \
  --data config.policy=localاین دستور به Kong Gateway دستور داده است که حداکثر 5 درخواست در دقیقه به ازای هر آدرس IP مشتری برای همه مسیرها و خدمات اعمال کند. پاسخی خواهید دید که حاوی پیکربندی جدید افزونه است، از جمله اطلاعات شناسایی مشابه:&amp;quotid&amp;quot: &amp;quotfc559a2d-ac80-4be8-8e43-cb705524be7f&amp;quot,
&amp;quotname&amp;quot: &amp;quotrate-limiting&amp;quot,
&amp;quotenabled&amp;quot: trueپس از پیکربندی محدودیت نرخ، می‌توانیم با ارسال درخواست‌های بیشتر و سپس در محدودیت زمانی پیکربندی شده، تأیید کنیم که به درستی پیکربندی شده و کار می‌کند.دستور زیر را برای ارسال سریع 6 درخواست ساختگی اجرا می کنیم:for _ in {1..6}; do curl -s -i localhost:8000/mock/request; echo; sleep 1; doneپس از دستورات بالا می بایست ارور دریافت کنیم:{
   &amp;quotmessage&amp;quot: &amp;quotAPI rate limit exceeded&amp;quot
}ویژگی ها و راه اندازی Key Authentication:احراز هویت فرایندی است برای تایید اینکه درخواست کننده مجوز دسترسی به یک منبع را دارد. همانطور که از نام آن پیداست، احراز هویت API gateway جریان داده ها را به و از سرویس های upstream شما تایید می کند.با کنترل احراز هویت Kong Gateway، درخواست‌ها به سرویس‌های upstream نمی‌رسند مگر اینکه مشتری با موفقیت احراز هویت را انجام داده باشد. این بدان معناست که خدمات upstream درخواست‌های از پیش مجاز را پردازش می‌کنند و آنها را از هزینه احراز هویت آزاد می‌کند، که باعث صرفه‌جویی در زمان محاسبه و تلاش توسعه می‌شود.Kong Gateway در تمام تلاش‌های احراز هویت قابل مشاهده است، که توانایی ایجاد قابلیت‌های نظارت و هشدار برای پشتیبانی از در دسترس بودن و انطباق سرویس را فراهم می‌کند. احراز هویت کلید در دروازه Kong با استفاده از Customer Object کار می کند. کلیدها به مصرف‌کنندگان اختصاص داده می‌شوند و برنامه‌های مشتری کلید را در درون درخواست‌هایی که می‌کنند ارائه می‌کنند. برای راه اندازی با ساخت یک مشتری به نام لوکا شروع می کنیم:curl -i -X POST http://localhost:8001/consumers/ \
  --data username=lukaدر گام بعدی کلید به مشتری اختصاص می یابد:curl -i -X POST http://localhost:8001/consumers/luka/key-auth \
  --data key=top-secret-keyویژگی ها و راه اندازی Load Balancing :تعادل بار روشی برای توزیع ترافیک درخواست API در چندین سرویس upstream است. تعادل بار پاسخگویی کلی سیستم را بهبود می بخشد و با جلوگیری از بارگذاری بیش از حد منابع فردی، خرابی ها را کاهش می دهد. در مثال زیر، از یک برنامه کاربردی استفاده می‌کنید که در دو سرور مختلف یا اهداف بالادستی مستقر شده است. Kong Gateway باید تعادل را در هر دو سرور بارگذاری کند، به طوری که اگر یکی از سرورها در دسترس نباشد، به طور خودکار مشکل را شناسایی کرده و تمام ترافیک را به سرور در حال کار هدایت کند. upstream به برنامه‌های سرویسی اشاره دارد که پشت Kong gateway قرار دارند و درخواست‌های مشتری به آن‌ها ارسال می‌شوند. در Kong Gateway، یک upstream یک نام میزبان مجازی را نشان می‌دهد و می‌تواند برای بررسی سلامت، قطع مدار، و بارگذاری درخواست‌های ورودی از طریق چندین سرویس بک اند هدف استفاده شود.برای راه اندازی ابتدا یک upstream می سازیم:curl -X POST http://localhost:8001/upstreams \
  --data name=example_upstreamسپس دو target را مشخص کرده و سرویس endpoint backend را قرار می دهیم :curl -X POST http://localhost:8001/upstreams/example_upstream/targets \
  --data target=&#039;mockbin.org:80&#039;
curl -X POST http://localhost:8001/upstreams/example_upstream/targets \
  --data target=&#039;httpbin.org:80&#039;حال برای بروزرسانی از مجموعه دستورات زیر استفاده می کنیم :curl -X PATCH http://localhost:8001/services/example_service \
  --data host=&#039;example_upstream&#039;جمع بندیدر ابتدا به معرفی Kong gateway پرداختیم و قسمت های مختلف آن را شناختیم، در ادامه به بررسی ویژگی ها، نحوه کارکرد و مزایای ابزار های مختلف Kong اشاره شد تا بدانیم چه استفاده ای می توان از این ابزار قدرتمند کرد. در نهایت مختصری به نحوه نصب و راه اندازی ویژگی های اصلی و پلاگین های Kong اشاره کردیم.. تحقیق توسط (به تریتب حروف الفبا) حسام اثنی عشری، عطا رحیم‌زاده، شایان شعبانزاده، امیررضا قاسمی ویسی برای درس طراحی وب استاد جعفرنژاد ، نیمسال اول 1401 دانشگاه صنعتی شریف انجام شده است.</description>
                <category>حسام اثنی عشری</category>
                <author>حسام اثنی عشری</author>
                <pubDate>Sat, 11 Feb 2023 20:08:50 +0330</pubDate>
            </item>
                    <item>
                <title>مرور مختصری بر روی ESLint</title>
                <link>https://virgool.io/@hesamasna/%D9%85%D8%B1%D9%88%D8%B1-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1%DB%8C-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-eslint-tr86pggbhdo6</link>
                <description>معرفی مختصر ESLintیک Linter بسیار محبوب و متن باز برای جاوا اسکریپت و تایپ اسکریپت است که می‌تواند کد این زبان‌ها را تحلیل کند و هشدارها و خطاهایی بر اساس شدت نقض قواعد مختلف ارائه دهد که باعث میشود کدی بهتر با احتمال خطای کمتری توسط توسعه دهنده نوشته شود.نصب ESLint ابتدا نیاز است که پکیج منیجر npm را نصب کنیمin linux

$ sudo apt install
$ nodejs npmسپس با دستور زیر با استفاده از npm پکیج eslint را نصب میکنیمnpm init @eslint/configدر صورتی که قصد استفاده از پیکربندی های موجود حال حاضر را دارید میتوانید مطابق با نمونه زیر عمل کنید با اضافه کردن--config [package-name]برخی از پکیج های مناسب در لینک زیر آورده شده است. لینک# use `eslint-config-semistandard` shared config

# npm 7+
npm init @eslint/config -- --config semistandard

# or (`eslint-config` prefix is optional)
npm init @eslint/config -- --config eslint-config-semistandard

# ⚠️ npm 6.x no extra double-dash:
npm init @eslint/config --config semistandardسوالات هنگام نصب:در هنگام نصب یکسری سوالات پرسیده خواهد شد که در ادامه به آن ها اشاره خواهیم کرد البته لازم به ذکر است که بعد از نصب نیز می توان آن ها را مجدد پیکربندی کرد:تنظیمات داخل فایلی با نام eslintrc قرار خواهد گرفتHow would you like to use ESLint? ...
  To check syntax only
&gt; To check syntax and find problems
  To check syntax, find problems, and enforce code styleگزینه دوم به صورت پیشفرض انتخاب شده است در این سوال از شما می پرسد که ESLint چه کاری را برای شما انجام 1.فقط سینتکس کد را چک کند 2.به جز سینتکس ایرادهای کد را نیز پیدا کند 3.این گزینه علاوه بر سینتکس و ایراد های ساختاری کند ،استایل کد را نیز بررسی می کندWhat type of modules does your project use? ...
&gt; JavaScript modules (import/export)
  CommonJS (require/exports)
  None of theseاین مورد معمولا باید گزینه JavaScript modules انتخاب شود مگر نسبت به نیاز پروژه شما تغییر کندWhich framework does your project use? ...
&gt; React
  Vue.js
  None of theseدر این قسمت فریمورک مورد استفاده را انتخاب می کنیمDoes your project use TypeScript? » No / Yesدر این قسمت اگر از سوپرست تایپ اسکریپ برای پروژه خود استفاده می کنید باید این گزیته را برابر با YES قرار دهید زیرا برخی قوانین در تایپ اسکریپ متفاوت با جاوااسکریپ می باشدWhere does your code run? ...  (Press &lt;space&gt; to select, &lt;a&gt; to toggle all, &lt;i&gt; to invert selection)
√ Browser
√ Nodeاین مورد به محل اجرای کد اشاره دارد که داخل مرورگر باشد یا سرورWhat format do you want your config file to be in? ...
&gt; JavaScript
  YAML
  JSONاین قسمت به محل ذخیره سازی کانفیگ های ESLint اشاره می کند که دارای چه فرمتی باشد که جاوااسکریپت گزینه بهتری برای مدیریت استWould you like to install them now? » No / Yesاین مورد اشاره به نصب ESLint دارد که می خوایم نصب کنیم پس گزینه YES را می زنیمWhich package manager do you want to use? ...
&gt; npm
  yarn
  pnpmدر این قسمت پکیج منیجری که از آن استفاده می کنیم را باید انتخاب کنیم که برای نصب مشکلی پیش نیاید.بعد از انجام این مراحل میتوانید به راحتی eslint را بر روی هرفایلی اجرا کنیدnpx eslint [your-file.js]پیکربندی:بعد از اجرای دستورnpm init @eslint/configبعد از اجرا دستور npm init @eslint/config در دایرکتوری پروژه شما یک فایل .eslintrc.{js,yml,json} ساخته خواهد شد که درآن میتوانید قانون ها و سطح آنها رو مشخص کنید.به عنوان مثال{
   &amp;quotrules&amp;quot: {
       &amp;quotsemi&amp;quot: [&amp;quoterror&amp;quot, &amp;quotalways&amp;quot],
       &amp;quotquotes&amp;quot: [&amp;quoterror&amp;quot, &amp;quotdouble&amp;quot]
   }
}قوانین بالا به الزام استفاده از semicolon و استفاده از double quote اشاره میکنید که درصورت عدم رعایت آنها در ادیتور خود خطای متناسب با این قوانین را مشاهده خواهید کردسطوح نشان دادن خطا:نمونه زیر را در نظر بگیرید{
    &amp;quotno-use-before-define&amp;quot: [&amp;quoterror&amp;quot, {
        &amp;quotfunctions&amp;quot: true,
        &amp;quotclasses&amp;quot: true,
        &amp;quotvariables&amp;quot: true,
        &amp;quotallowNamedExports&amp;quot: false
    }]
}این قانون اشاره به این دارد که استفاده از یک متغیر قبل از تعریف آن باعث نشان دادن خطا میشود.در قانون نوشته شده بالا با استفاده از آپشن های زیر میتوان پیام دریافتی مربوط به این قانون را تفییر دهیمبا استفاده از off میتوان به طور کلی این قانون را غیرفعال کرد.با استفاده از warn در هنگام نقض این قانون به جای نشان دادن خطا صرفا یک هشدار به آنها نشان داده میشوددیگر امکانات و دسترسی های این پکیجدر نظر نگرفتن برخی فایل ها در اجرای قوانینexport default [
    {
        files: [&amp;quotsrc/**/*.js&amp;quot],
        ignores: [&amp;quot**/*.config.js&amp;quot],
        rules: {
            semi: &amp;quoterror&amp;quot
        }
    }
];به عنوان مثال در گزینه بالا قوانین مشخص شده در فایل های جی اس اجرا میشود ولی در فایل هایی با اکستنشن .config.js اجرا نمیشودمشخص کردن نسخه قابل قبول با مشخص کردن این کانفیگ ESLint کد های مارا بر اساس نسخه مشخص شده داوری میکند در این کانفیگ از ecmaVersion برای زبان js استفاده میشود.export default [
    {
        files: [&amp;quot**/*.js&amp;quot],
        languageOptions: {
            ecmaVersion: 5
        }
    }
];در مثال بالا فایل های js ما کد های بر اساس ورژن 5 ecma داوری میشود. این گزینه به طور معمول بر روی latest تنظیم شده است که آخرین نسخه پایدار منتشر شده پیروی میکند.مشخص کردن parser:به طور پیشفرض این پکیج از Espree به عنوان مفسر خود استفاده میکند ولی این امکان را داریم که از پکیج های مرسومی مانند babel نیز استفاده کنیم.استفاده از قوانین مرسوم این پکیج:با قرار دادن این بخش از کد در فایل .eslintrc.{js,yml,json}{
    &amp;quotextends&amp;quot: &amp;quoteslint:recommended&amp;quot
}قوانین پیشنهادی این پکیج به طور پیش فرض برای ریپازینتوری شما فعال خواهد شد.. تحقیق توسط (به تریتب حروف الفبا) حسام اثنی عشری، عطا رحیم‌زاده، شایان شعبانزاده، امیررضا قاسمی ویسی برای درس طراحی وب استاد جعفرنژاد ، نیمسال اول 1401 دانشگاه صنعتی شریف انجام شده است.</description>
                <category>حسام اثنی عشری</category>
                <author>حسام اثنی عشری</author>
                <pubDate>Mon, 09 Jan 2023 11:56:21 +0330</pubDate>
            </item>
                    <item>
                <title>طراحی مبتنی بر ویژگی ( Attribute Driven Design )</title>
                <link>https://virgool.io/@hesamasna/%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%85%D8%A8%D8%AA%D9%86%DB%8C-%D8%A8%D8%B1-%D9%88%DB%8C%DA%98%DA%AF%DB%8C-attribute-driven-design-zy7srnrmxtky</link>
                <description>سلام به همه من تحقیقی داشتم درباره طراحی مبتی بر ویژگی ولی خب سورس ایرانی برای این مورد نتوستم پیدا کنم برای همین تصمیم گرفتم نتیجه تحقیق ام رو اینجا هم بزارم که اگر کسی نیاز داشت استفاده کنه و اگرم مشکلی وجود داشت بهم بگید که بدونم . ?طراحی مبتنی بر ویژگی چیست؟طراحی مبتنی بر ویژگی یا Attribute Driven Design که به اختصار به آن ADD نیز گفته می شود یک روش گام به گام برای طراحی معماری نرم افزار است که برای سیستم فشرده-نرم افزاری استفاده می شود که می توان از این روش داخل سیستم های اطلاعاتی بزرگ تا سیستم های نهفته استفاده کرد .فرآیند طراحی به کمک ADD  بر اساس الزامات مهم معماری ( ASR) که شامل الزامات عملکرد، الزامات ویژگی کیفی و محدودیت ها است انجام می شود.در آخر طراحی مل مجموعه‌ای از طرح‌های نما معماری داریم نه یک معماری با جزئیات کامل.خط زمانی ADD:طراحی مبتنی بر ویژگی (ADD) روشی برای طراحی معماری نرم افزار هست توسط دانشگاه و موسسه مهندسی نرم افزار کارنگی ملون آمریکا توسعه داده شد.و تا الان سه ورژن از آن عرضه شده است:-ADD 1.0 : این ورژن سال 2000 منتشر شد و دارای 5 گام اصلی می باشد و 3 ورودی می باشد که به شرح زیر می باشد :ورودی‌ها: الزامات عملکرد - الزامات ویژگی کیفی - محدودیت هاگام‌ها:1. یک کامپوننت یا بخش در سیستم را برای طراحی انتخاب می کنیم. برای سیستم هایی که از قبل وجود داشته اند فیچری که قرار است پیداه سازی شود انتخاب می شود.2. نیازمندی های مربط با آن بخش یا همان ASRs  را میابیم.3. یک طراحی برای همان بخش ارایه می کنیم.4. طراحی را پیاده‌سازی می کنیم و چک می کنیم که نیازمندی‌ها برطرف شده باشند و آن را آنالیز می کنیم .5. قدم های 1 الی 4 را برای بخش‌های بعدی تکرار می کنیم.-ADD 2.0 :این ورژن سال 2006 منتشر شد و مانند ورژن 1.0 داری همان 3 ورودی و 5 گام می باشد اما تفاوت آن با ورژن 1.0 این است که تمرکز اصلی در این وژن بر روی طراحی معماری مفهومی بوده است -ADD 3.0 :این ورژن سال 2016 معرفی شد و بسیاری از مشکلات ورژن های قبل را برطرف کرده بود ، این ورژن دارای 2 ورودی بیشتر و چند گام اضافه تر نیز بود:با توجه به عکس بالا ورودی ها ما شامل : الزامات عملکرد - الزامات ویژگی کیفی - محدودیت ها - اهداف طراحی - نگران‌ها می باشد و گام های ما به صورت زیر تغییر می کند :1. بررسی ورودی ها : که داخل این بخش سعی می کنیم ورودی ها را بررسی کنیم که داخل فرآیند به مشکل برنخوریم2. تعیین اهداف و انتخاب ورودی ها3. انتخاب یک یا چند از بخش ها و کامپوننت ها4. انتخاب یک یا چند مفهموم طراحی که نیاز هدف و ورودی ها و ASRs را برآورده کند5. پیاده سازی و برآورده کردن نیاز ها و ایجاد ارتباط ها و تعریف رابط ها7. ثبت طراحی و اقدامات انجام شده8. انجام مجدد تحلیل و درصورت نیاز بازگشت به گام 2 برای بخش‌های بعدیمشکلات طراحی مبتنی بر ویژگی چیست ؟از جمله مشکلات این طراحی می توان به این مورد اشاره کرد که :1. ثبت فرآیند هر بخش به صورت مسنتد که باید شامل برخی سوالات مانند : چه الزاماتی رعایت شده؟ ، چه کسی طراحی را انجام داده ؟ ، چه فرضیاتی رعایت شده است؟2. ممکن است طراحی بدی برای آن بخش انتخاب شود که این مورد بر روی روابط نیز تاثیز گذار خواهد بود.3. ممکن است مشکلات و انتخاب اشتباه طراحی زمان تست محصول مشخص شود و این مورد نیازمند هزینه کردن منابع بیشتر برای بازگشت و حل مشکل خواهد بود 4. ممکن است زمان شروع فرآیند الزامات و فرضیات را اشتباه یا به صورت کامل در نظر نگیریم یا حتی برخی از الزامات تغییر کنند که این باعث تغییر طراحی یک بخش و روابط آن شوند.طراحی مبتنی بر ویژگی که مزیتی دارد؟1. طراحان را قادر می‌سازد تا ویژگی‌ها سیستم را در مراحل اولیه طراحی درک کنند.2. طراحان را در طراحی معماری چابک تر می کند چون به بخش های کوچک تری تقسیم شده است. 2. طراحان را در طراحی معماری راهنمایی می‌کند که همه نیازمندی ها را برآورده کنند.3. مجموعه ای از طرح های معماری است که به شما در شکل گیری معماری نهایی کمک می کند.داخل مقاله ای که  اخیرن برای ورژن 3.0 منتشر شده است یک چک لیستی گذاشته شده است که به شما در انجام این فرآیند کمک خواهد کرد که می توانید آن را از این لینک دانلود نمایید .لغات به کار رفته در متن:الزامات مهم معماری (Architecturally Significant Requirements :(ASR  الزامات عملکرد: Functional Requirementsالزامات ویژگی کیفی : Quality Attribute Requirements  محدودیت ها: Constraintsسیستم فشرده نرم افزار : Software-Intensive System. تحقیق برای درس طراحی تحلیل و طراحی سیستم‌ها استاد احمدیان ، نیمسال اول 1401 دانشگاه صنعتی شریف انجام شده است.</description>
                <category>حسام اثنی عشری</category>
                <author>حسام اثنی عشری</author>
                <pubDate>Mon, 19 Dec 2022 12:30:56 +0330</pubDate>
            </item>
            </channel>
</rss>