{"id":23509,"date":"2026-05-05T08:47:22","date_gmt":"2026-05-05T08:47:22","guid":{"rendered":"https:\/\/umang.pk\/2026\/05\/05\/%d9%85%d8%a7%d8%a6%db%8c%da%a9%d8%b1%d9%88-%d8%b3%d8%b1%d9%88%d8%b3%d8%b2-%da%a9%d9%88-%d9%81%d8%b1%d9%86%d9%b9-%d8%a7%db%8c%d9%86%da%88-%d8%a7%d9%86%d8%ac%db%8c%d9%86%d8%a6%d8%b1-%da%a9%db%92-%d8%b7\/"},"modified":"2026-05-05T08:47:22","modified_gmt":"2026-05-05T08:47:22","slug":"%d9%85%d8%a7%d8%a6%db%8c%da%a9%d8%b1%d9%88-%d8%b3%d8%b1%d9%88%d8%b3%d8%b2-%da%a9%d9%88-%d9%81%d8%b1%d9%86%d9%b9-%d8%a7%db%8c%d9%86%da%88-%d8%a7%d9%86%d8%ac%db%8c%d9%86%d8%a6%d8%b1-%da%a9%db%92-%d8%b7","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/05\/05\/%d9%85%d8%a7%d8%a6%db%8c%da%a9%d8%b1%d9%88-%d8%b3%d8%b1%d9%88%d8%b3%d8%b2-%da%a9%d9%88-%d9%81%d8%b1%d9%86%d9%b9-%d8%a7%db%8c%d9%86%da%88-%d8%a7%d9%86%d8%ac%db%8c%d9%86%d8%a6%d8%b1-%da%a9%db%92-%d8%b7\/","title":{"rendered":"\u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u0648 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0633\u06d2 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0632 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u0627\u0633 \u06a9\u06d2 \u0648\u0627\u0631\u062b \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u062f\u0646 \u0622\u067e \u0627\u06cc\u06a9 API \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0646\u06a9\u0627\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06af\u0644\u06d2 \u062f\u0646 \u0622\u067e \u067e\u0627\u0646\u0686 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0648 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0645\u0639\u0627\u06c1\u062f\u06c1\u060c \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u0648\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u062e\u06cc\u0627\u0644 \u06c1\u06d2 \u06a9\u06c1 &quot;\u0635\u0627\u0631\u0641&#8221; \u06a9\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645\u06cc\u06ba \u067e\u0627\u0628\u0646\u062f \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642\u060c \u062d\u062a\u0645\u06cc \u0645\u0633\u062a\u0642\u0644 \u0645\u0632\u0627\u062c\u06cc\u060c \u0627\u0648\u0631 \u0633\u0631\u0648\u0633 \u0645\u06cc\u0634 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u0627\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba \u0644\u0648\u0688\u0646\u06af \u06a9\u06d2 \u062d\u0627\u0644\u0627\u062a\u060c \u0628\u0627\u0633\u06cc \u0688\u06cc\u0679\u0627\u060c \u0633\u0633\u062a \u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc \u0633\u0631\u0648\u0633\u0632 \u0627\u0648\u0631 \u0645\u06cc\u0631\u0627 \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u0635\u0641\u062d\u06c1 \u06a9\u06cc\u0648\u06ba \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686 \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0636\u0645\u0648\u0646 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u06d4 \u0622\u067e \u06cc\u06c1 \u0633\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc\u0627\u06ba \u067e\u06cc\u062f\u0627 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0645\u062a\u0639\u062f\u062f \u0633\u0631\u0648\u0633 APIs \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u0627\u067e\u0646\u06d2 UI \u0645\u06cc\u06ba \u062c\u0632\u0648\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u06a9\u0648 \u062e\u0648\u0628\u0635\u0648\u0631\u062a\u06cc \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u062a\u0645\u0627\u0645 \u0633\u0631\u0648\u0633\u0632 \u0645\u06cc\u06ba \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u062d\u0627\u0644\u062a \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06cc\u0633\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u0627\u0648\u0631 API \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u067e\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0624\u062b\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 <strong>\u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0622\u062f\u06be\u06cc \u062c\u0646\u06af \u0645\u0648\u0627\u0635\u0644\u0627\u062a \u06a9\u06cc \u06c1\u06d2\u060c \u06a9\u0648\u0688 \u0646\u06c1\u06cc\u06ba\u06d4<\/strong>.<\/p>\n<p>\u0645\u0642\u0635\u062f \u0622\u067e \u06a9\u0648 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631 \u0628\u0646\u0627\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0628\u0644\u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u0633\u06d2 \u0630\u06c1\u0646\u06cc \u0645\u0627\u0688\u0644 \u0627\u0648\u0631 \u0646\u0645\u0648\u0646\u06d2 \u062f\u06cc\u0646\u0627 \u06c1\u06d2 \u062c\u0648 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06cc \u062f\u0646\u06cc\u0627 \u0645\u06cc\u06ba \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u06a9\u0648 \u06a9\u0645 \u062a\u06a9\u0644\u06cc\u0641 \u062f\u06c1 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h3>\n<p>\u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0627\u0626\u062f\u06c1 \u0627\u0679\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>\u0631\u062f \u0639\u0645\u0644 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0645\u0644\u062a\u0627 \u062c\u0644\u062a\u0627 \u062c\u0632\u0648 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 (\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 React \u0627\u0648\u0631 TypeScript \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644)<\/p>\n<\/li>\n<li>\n<p>REST API \u0627\u0648\u0631 HTTP \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0641\u06c1\u06cc\u0645<\/p>\n<\/li>\n<li>\n<p>\u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 \u06a9\u0631\u06cc\u06ba (\u0641\u0686\u060c \u0627\u06cc\u06a9\u0633\u06cc\u0648\u0633\u060c \u06cc\u0627 \u0631\u06cc \u0627\u06cc\u06a9\u0679 \u0633\u0648\u0627\u0644)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06cc\u0627 \u06c1\u06cc\u06ba \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0639\u0645\u0648\u0645\u06cc \u0622\u06af\u0627\u06c1\u06cc (\u0627\u06cc\u06a9 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba)<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-the-frontends-microservice-problem\">\u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644<\/h2>\n<p>\u06cc\u06a9 \u0633\u0646\u06af\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba\u060c \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u06cc\u06a9 API \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0648\u06c1 API \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2\u060c \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u06cc \u0634\u06a9\u0644 \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc UI \u06a9\u06d2 \u0644\u06cc\u06d2 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u0632\u0646\u062f\u06af\u06cc \u0633\u0627\u062f\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba\u060c \u0627\u06cc\u06a9 API \u06a9\u0648 \u0645\u062a\u0639\u062f\u062f \u0645\u06cc\u06ba \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-text\">Monolith:\n  Browser \u2192 API \u2192 Database\n\nMicroservices:\n  Browser \u2192 API Gateway \u2192 User Service\n                        \u2192 Order Service\n                        \u2192 Inventory Service\n                        \u2192 Payment Service\n                        \u2192 Notification Service\n<\/code><\/pre>\n<p>\u0627\u0646 \u062e\u062f\u0645\u0627\u062a \u0645\u06cc\u06ba \u0633\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u0679\u06cc\u0645 \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u06c1\u06d2\u060c \u062c\u0648 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u062e\u062a\u0644\u0641 \u0688\u06cc\u0679\u0627 \u0641\u0627\u0631\u0645\u06cc\u0679\u0633 \u06cc\u0627 \u0642\u0648\u0627\u0639\u062f \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0627\u0628 \u0622\u067e \u06a9\u0648 \u06a9\u0686\u06be \u0646\u0626\u06d2 \u0686\u06cc\u0644\u0646\u062c\u0632 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u0645\u062a\u0639\u062f\u062f \u0645\u0639\u0627\u06c1\u062f\u06d2:<\/strong> \u06c1\u0631 \u0633\u0631\u0648\u0633 \u06a9\u06cc \u0627\u067e\u0646\u06cc API \u06a9\u06cc \u0634\u06a9\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc \u0633\u0631\u0648\u0633 \u0645\u06cc\u06ba &quot;\u067e\u0631\u0648\u0688\u06a9\u0679&#8221; \u06a9\u06d2 \u06a9\u06cc\u0679\u0644\u0627\u06af \u0633\u0631\u0648\u0633 \u0645\u06cc\u06ba &quot;\u067e\u0631\u0648\u0688\u06a9\u0679&#8221; \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0641\u06cc\u0644\u0688\u0632 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062c\u0632\u0648\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc:<\/strong> \u0622\u0631\u0688\u0631\u0646\u06af \u0633\u0631\u0648\u0633 50ms \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062c\u0648\u0627\u0628 \u062f\u06d2 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 \u0631\u06cc\u0641\u0631\u0644 \u0633\u0631\u0648\u0633 \u06a9\u0627 \u0648\u0642\u062a \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 UI \u06a9\u0648 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0645\u0637\u0627\u0628\u0642\u062a:<\/strong> \u0622\u0631\u0688\u0631\u0646\u06af \u0633\u0631\u0648\u0633 \u0627\u0628 \u0628\u06be\u06cc \u067e\u0631\u0627\u0646\u0627 \u067e\u062a\u06c1 \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0635\u0627\u0631\u0641 \u0646\u06d2 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0627\u062e\u06cc\u0631 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1:<\/strong> \u0627\u06cc\u06a9 \u0635\u0641\u062d\u06c1 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062a\u06cc\u0646 \u06cc\u0627 \u0686\u0627\u0631 API \u06a9\u0627\u0644\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u067e\u0691 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u06cc\u06c1 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0645\u0633\u0626\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0648 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u062d\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-pattern-1-the-backend-for-frontend-bff\">\u067e\u06cc\u0679\u0631\u0646 1: \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0641\u0627\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 (BFF)<\/h2>\n<p>\u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06cc \u062f\u0646\u06cc\u0627 \u0645\u06cc\u06ba\u060c \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0628\u0627\u0627\u062b\u0631 \u067e\u06cc\u0679\u0631\u0646 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06c1\u06d2\u06d4 BFF \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0648\u0631 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u067e\u062a\u0644\u06cc API \u067e\u0631\u062a \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645 \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06cc \u0645\u062e\u0635\u0648\u0635 \u0636\u0631\u0648\u0631\u06cc\u0627\u062a \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-text\">Without BFF:\n  Browser \u2192 User Service    (call 1)\n  Browser \u2192 Order Service   (call 2)\n  Browser \u2192 Inventory Service (call 3)\n  3 round trips, 3 contracts to manage\n\nWith BFF:\n  Browser \u2192 BFF \u2192 User Service\n                \u2192 Order Service\n                \u2192 Inventory Service\n  1 round trip, 1 contract to manage\n<\/code><\/pre>\n<p>BFF \u06a9\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0648 \u062c\u0632\u0648 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u0641\u0627\u0631\u0645 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0631\u0627\u0633 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u062a\u0635\u062f\u06cc\u0642\u06cc \u0679\u0648\u06a9\u0646 \u067e\u0627\u0633 \u06a9\u0631\u0646\u0627\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ BFF endpoint: GET \/api\/order-summary\/:orderId\n\/\/ Aggregates data from three services into one frontend-friendly response\nimport express from \"express\";\n\nconst router = express.Router();\n\nrouter.get(\"\/api\/order-summary\/:orderId\", async (req, res) => {\n  const { orderId } = req.params;\n  const token = req.headers.authorization;\n\n  try {\n    const [order, customer, shipment] = await Promise.allSettled([\n      fetch(`\\({ORDER_SERVICE}\/orders\/\\){orderId}`, {\n        headers: { Authorization: token },\n      }).then((r) => r.json()),\n      fetch(`\\({USER_SERVICE}\/users\/\\){req.userId}`, { \/\/ userId set by auth middleware\n        headers: { Authorization: token },\n      }).then((r) => r.json()),\n      fetch(`\\({SHIPPING_SERVICE}\/shipments?orderId=\\){orderId}`, {\n        headers: { Authorization: token },\n      }).then((r) => r.json()),\n    ]);\n\n    res.json({\n      order: order.status === \"fulfilled\" ? order.value : null,\n      customer: customer.status === \"fulfilled\" ? customer.value : null,\n      shipment: shipment.status === \"fulfilled\" ? shipment.value : null,\n      errors: [order, customer, shipment]\n        .filter((r) => r.status === \"rejected\")\n        .map((r) => r.reason.message),\n    });\n  } catch (error) {\n    res.status(500).json({ error: \"Failed to assemble order summary\" });\n  }\n});\n<\/code><\/pre>\n<p>\u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u062f\u06cc\u06ba\u06d4 <code>Promise.allSettled<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 <code>Promise.all<\/code>. \u06cc\u06c1 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0628\u06c1\u062a \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 <code>Promise.all<\/code> \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u0646\u0627\u06a9\u0627\u0645: \u0627\u06af\u0631 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u0628\u0646\u062f \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u067e\u0648\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>Promise.allSettled<\/code> \u0622\u067e \u062c\u0632\u0648\u06cc \u0688\u06cc\u0679\u0627 \u0648\u0627\u067e\u0633 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062f\u0631\u062c \u0630\u06cc\u0644 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/p>\n<h3 id=\"heading-when-to-use-a-bff\">\u0627\u067e\u0646\u0627 BFF \u06a9\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>BFF \u0633\u0631\u0645\u0627\u06cc\u06c1 \u06a9\u0627\u0631\u06cc \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06d2 \u0627\u06af\u0631:<\/p>\n<ul>\n<li>\n<p>\u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0641\u06cc \u0635\u0641\u062d\u06c1 \u062a\u06cc\u0646 \u06cc\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u0631\u0648\u0633\u0632 \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u062e\u062a\u0644\u0641 \u06a9\u0644\u0627\u0626\u0646\u0679\u0633 (\u0648\u06cc\u0628\u060c \u0645\u0648\u0628\u0627\u0626\u0644\u060c \u0627\u06cc\u0688\u0645\u0646) \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0633\u0631\u0648\u0633 \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0645\u062e\u062a\u0644\u0641 \u0634\u06a9\u0644\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645 \u06cc\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0631\u062f\u0639\u0645\u0644 \u06a9\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u067e \u06a9\u0648 BFF \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u06af\u0631:<\/p>\n<ul>\n<li>\n<p>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc API \u06af\u06cc\u0679 \u0648\u06cc\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba \u062c\u0648 \u062c\u0645\u0639 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba (\u062c\u06cc\u0633\u06d2 Apollo Federation for GraphQL)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0635\u0631\u0641 \u0627\u06cc\u06a9 \u06cc\u0627 \u062f\u0648 \u062e\u062f\u0645\u0627\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-pattern-2-handling-partial-failures-in-the-ui\">\u067e\u06cc\u0679\u0631\u0646 2: UI \u0645\u06cc\u06ba \u062c\u0632\u0648\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u0627<\/h2>\n<p>\u06cc\u06a9 \u0633\u0646\u06af\u06cc \u0645\u06cc\u06ba\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u06cc\u0627 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06cc \u062f\u0646\u06cc\u0627 \u0645\u06cc\u06ba\u060c \u062c\u0632\u0648\u06cc \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u062d\u0627\u0635\u0644 \u06a9\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u0631\u0688\u0631 \u06a9\u0627 \u0688\u06cc\u0679\u0627 \u0679\u06be\u06cc\u06a9 \u0644\u0648\u0688 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0633\u0641\u0627\u0631\u0634\u06cc \u0633\u0631\u0648\u0633 \u0628\u0646\u062f \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0686\u06cc\u06a9 \u06a9\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u06a9\u06cc \u0633\u0631\u0648\u0633 \u0633\u0633\u062a \u06c1\u06d2\u06d4<\/p>\n<p>UI \u06a9\u0648 \u0627\u0633\u06d2 \u0627\u062d\u0633\u0646 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0627\u0635\u0648\u0644: <strong>\u063a\u06cc\u0631 \u0627\u06c1\u0645 \u0633\u0631\u0648\u0633 \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0627\u06c1\u0645 \u0628\u06c1\u0627\u0624 \u0645\u06cc\u06ba \u062e\u0644\u0644 \u0646\u06c1 \u0622\u0646\u06d2 \u062f\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-typescript\">\/\/ Types for partial data loading\ninterface ServiceResult<t> {\n  data: T | null;\n  status: \"loaded\" | \"error\" | \"loading\";\n  error?: string;\n}\n\ninterface OrderPageData {\n  order: ServiceResult<order>;\n  recommendations: ServiceResult<product>;\n  reviews: ServiceResult<review>;\n}\n<\/review><\/product><\/order><\/t><\/code><\/pre>\n<p>\u062f\u0633\u062a\u06cc\u0627\u0628 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0631\u06cc\u0646\u0688\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062c\u0632\u0627\u0621 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">function OrderPage({ orderId }: { orderId: string }) {\n  const { order, recommendations, reviews } = useOrderPageData(orderId);\n\n  \/\/ Critical: order must load or the page makes no sense\n  if (order.status === \"loading\") return <orderskeleton\/>;\n  if (order.status === \"error\") return <errorpage message=\"{order.error}\"\/>;\n\n  return (\n    <p>\n      {\/* Critical section: always rendered *\/}\n      <orderdetails order=\"{order.data}\"\/>\n\n      {\/* Non-critical: degrades gracefully *\/}\n      <section aria-label=\"Recommendations\">\n        {recommendations.status === \"loaded\" ? (\n          <recommendationcarousel products=\"{recommendations.data}\"\/>\n        ) : recommendations.status === \"error\" ? (\n          <emptystate message=\"Recommendations Unavailable\"\/>\n        ) : (\n          <carouselskeleton\/>\n        )}\n      <\/section>\n\n      {\/* Non-critical: degrades gracefully *\/}\n      <section aria-label=\"Customer reviews\">\n        {reviews.status === \"loaded\" ? (\n          <reviewlist reviews=\"{reviews.data}\"\/>\n        ) : reviews.status === \"error\" ? (\n          <emptystate message=\"Reviews unavailable right now\"\/>\n        ) : (\n          <reviewskeleton\/>\n        )}\n      <\/section>\n    <\/p>\n  );\n}\n<\/code><\/pre>\n<h3 id=\"heading-classifying-critical-vs-non-critical-data\">\u0627\u06c1\u0645 \u0627\u0648\u0631 \u063a\u06cc\u0631 \u062d\u0633\u0627\u0633 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc<\/h3>\n<p>\u0635\u0641\u062d\u06c1 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u062a\u0645\u0627\u0645 \u0688\u06cc\u0679\u0627 \u0627\u062a\u0646\u0627 \u06c1\u06cc \u0627\u06c1\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u062a\u0639\u062f\u062f \u062e\u062f\u0645\u0627\u062a \u0633\u06d2 \u062d\u0627\u0635\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0635\u0641\u062d\u0627\u062a \u0628\u0646\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06c1\u0631 \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u06a9\u06cc \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0688\u06cc\u0679\u0627 \u06a9\u0627 \u0630\u0631\u06cc\u0639\u06c1<\/th>\n<th>\u062a\u0646\u0642\u06cc\u062f\u06cc<\/th>\n<th>\u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0622\u0631\u0688\u0631 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a<\/td>\n<td>\u06c1\u0627\u06ba<\/td>\n<td>\u063a\u0644\u0637\u06cc \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\u060c \u0645\u06a9\u0645\u0644 \u0645\u0646\u0638\u0631 \u06a9\u0648 \u0645\u0633\u062f\u0648\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u0633\u0679\u0645\u0631 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a<\/td>\n<td>\u06c1\u0627\u06ba<\/td>\n<td>\u063a\u0644\u0637\u06cc \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0633\u0641\u0627\u0631\u0634<\/td>\n<td>\u0646\u06c1\u06cc\u06ba<\/td>\n<td>\u062d\u0635\u0648\u06ba \u06a9\u0648 \u0686\u06be\u067e\u0627\u0626\u06cc\u06ba\u060c \u062e\u0627\u0644\u06cc \u062d\u0627\u0644\u062a \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba<\/td>\n<td>\u0646\u06c1\u06cc\u06ba<\/td>\n<td>&#8216;\u062c\u0627\u0626\u0632\u06c1 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1\u06cc\u06ba&#8217; \u067e\u06cc\u063a\u0627\u0645 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u062d\u0627\u0644 \u06c1\u06cc \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0627 \u06af\u06cc\u0627\u06d4<\/td>\n<td>\u0646\u06c1\u06cc\u06ba<\/td>\n<td>\u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u0686\u06be\u067e \u062c\u0627\u0624<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u06cc\u06c1 \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u067e\u0631\u0648\u0688\u06a9\u0679 \u0679\u06cc\u0645 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0634\u0639\u0648\u0631\u06cc \u0641\u06cc\u0635\u0644\u06c1 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0633\u0631\u0648\u0633 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-pattern-3-managing-distributed-state\">\u067e\u06cc\u0679\u0631\u0646 3: \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0627\u0646\u062a\u0638\u0627\u0645<\/h2>\n<p>\u06cc\u06a9 \u0633\u0646\u06af\u06cc \u062f\u0646\u06cc\u0627 \u0645\u06cc\u06ba\u060c \u0633\u0631\u0648\u0631 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0627 \u0648\u0627\u062d\u062f \u0630\u0631\u06cc\u0639\u06c1 \u06c1\u06d2\u06d4 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06cc \u062f\u0646\u06cc\u0627 \u0645\u06cc\u06ba\u060c \u0633\u0686\u0627\u0626\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641 \u06a9\u06cc \u062e\u062f\u0645\u062a \u0635\u0627\u0631\u0641 \u06a9\u0627 \u0645\u0648\u062c\u0648\u062f\u06c1 \u067e\u062a\u06c1 \u062c\u0627\u0646\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u0631\u0688\u0631\u0646\u06af \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u067e\u0627\u0633 \u0622\u067e \u06a9\u06d2 \u0622\u0631\u0688\u0631 \u06a9\u06d2 \u0648\u0642\u062a \u0622\u067e \u06a9\u06d2 \u067e\u062a\u06d2 \u06a9\u0627 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u0645\u06cc\u0686 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-stale-data-and-cache-boundaries\">\u067e\u0631\u0627\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0627\u0648\u0631 \u06a9\u06cc\u0634\u06d2 \u06a9\u06cc \u062d\u062f\u0648\u062f<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0645\u062a\u0639\u062f\u062f \u0633\u0631\u0648\u0633\u0632 \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0634\u06d2 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0645\u062e\u062a\u0644\u0641 \u062e\u062f\u0645\u0627\u062a \u06a9\u06cc \u0639\u0645\u0631\u0648\u06ba \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0646\u0631\u062e\u0648\u06ba \u067e\u0631 \u0688\u06cc\u0679\u0627\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Configure cache times based on how frequently the underlying data changes\nconst queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      staleTime: 30_000, \/\/ Default: 30 seconds\n    },\n  },\n});\n\n\/\/ Product catalog: changes infrequently\nfunction useProduct(productId: string) {\n  return useQuery({\n    queryKey: [\"product\", productId],\n    queryFn: () => fetchProduct(productId),\n    staleTime: 5 * 60_000, \/\/ 5 minutes: catalog updates are rare\n  });\n}\n\n\/\/ Inventory levels: changes constantly\nfunction useStockLevel(productId: string) {\n  return useQuery({\n    queryKey: [\"stock\", productId],\n    queryFn: () => fetchStockLevel(productId),\n    staleTime: 10_000, \/\/ 10 seconds: stock changes with every purchase\n    refetchInterval: 30_000, \/\/ Poll every 30 seconds on active pages\n  });\n}\n\n\/\/ User's own order: should reflect latest state\nfunction useOrder(orderId: string) {\n  return useQuery({\n    queryKey: [\"order\", orderId],\n    queryFn: () => fetchOrder(orderId),\n    staleTime: 0, \/\/ Always refetch: user expects to see their latest action\n  });\n}\n<\/code><\/pre>\n<p>\u063a\u0644\u0637\u06cc \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u06a9\u06cc\u0634\u0688 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u06cc\u06a9\u0633\u0627\u06ba \u0628\u0631\u062a\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u06a9\u06cc\u0679\u0644\u0627\u06af \u0633\u0631\u0648\u0633 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0648 \u06a9\u0626\u06cc \u0645\u0646\u0679 \u062a\u06a9 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc \u062e\u062f\u0645\u0627\u062a \u0645\u06cc\u06ba \u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc \u06a9\u06cc \u0633\u0637\u062d \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u062b\u0631\u062a \u0633\u06d2 \u062a\u0627\u0632\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0622\u0631\u0688\u0631 \u0688\u06cc\u0679\u0627 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u067e \u0679\u0648 \u0688\u06cc\u0679 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u062a\u0627\u0626\u062c \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-cross-service-invalidation\">\u06a9\u0631\u0627\u0633 \u0633\u0631\u0648\u0633 \u06a9\u06cc \u063a\u0644\u0637 \u06a9\u0627\u0631\u06cc<\/h3>\n<p>\u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0631\u06cc\u0627\u0633\u062a \u06a9\u0627 \u0633\u0628 \u0633\u06d2 \u0645\u0634\u06a9\u0644 \u062d\u0635\u06c1 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0628 \u0628\u0627\u0637\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0635\u0627\u0631\u0641 \u0622\u0631\u0688\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06c1:<\/p>\n<ol>\n<li>\n<p>\u0628\u0627\u0637\u0644 \u0622\u0631\u0688\u0631 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a (\u0622\u0631\u0688\u0631 \u0633\u0631\u0648\u0633)<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc \u06a9\u06cc \u0633\u0637\u062d\u0648\u06ba \u06a9\u0648 \u0628\u0627\u0637\u0644 \u06a9\u0631\u06cc\u06ba (\u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc \u0633\u0631\u0648\u0633)<\/p>\n<\/li>\n<li>\n<p>\u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0648\u0641\u0627\u062f\u0627\u0631\u06cc \u067e\u0648\u0627\u0626\u0646\u0679\u0633 (\u0635\u0627\u0631\u0641 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a) \u06a9\u0648 \u0628\u0627\u0637\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-typescript\">\/\/ After a successful order placement, invalidate across service boundaries\nasync function placeOrder(cart: Cart): Promise<order> {\n  const order = await api.post(\"\/api\/orders\", { items: cart.items });\n\n  \/\/ Invalidate data from multiple services that this action affected\n  queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n  queryClient.invalidateQueries({ queryKey: [\"stock\"] });\n  queryClient.invalidateQueries({ queryKey: [\"loyalty-points\"] });\n\n  \/\/ Optimistically update the cart (owned by the frontend)\n  queryClient.setQueryData([\"cart\"], { items: [] });\n\n  return order;\n}\n<\/order><\/code><\/pre>\n<p>\u06cc\u06c1 \u062f\u0633\u062a\u06cc \u0627\u0648\u0631 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u0634\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06cc\u0627\u062f \u0631\u06a9\u06be\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 \u06a9\u06c1 \u062c\u0628 \u0628\u06be\u06cc \u06a9\u0648\u0626\u06cc \u0646\u0626\u06cc \u0633\u0631\u0648\u0633 \u0627\u0633\u067e\u06cc\u0644 \u0627\u06cc\u0648\u0646\u0679 \u0645\u06cc\u06ba \u062f\u0644\u0686\u0633\u067e\u06cc \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u063a\u0644\u0637 \u06a9\u0627\u0631\u06cc \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u0645\u0636\u0628\u0648\u0637 \u0645\u062a\u0628\u0627\u062f\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u0633\u0631\u0648\u0631 \u0633\u06d2 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0627\u06cc\u0648\u0646\u0679\u0633 \u06cc\u0627 \u0648\u06cc\u0628 \u0633\u0627\u06a9\u0679 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0634 \u0627\u0646\u06cc\u0644\u06cc\u0688\u06cc\u0634\u0646 \u0633\u06af\u0646\u0644\u0632 \u06c1\u0648\u06ba\u060c \u06cc\u0627 \u0622\u067e \u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u0627\u0626\u06cc\u0688 \u0627\u0633\u0679\u06cc\u0679 \u0644\u06cc\u0626\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0634\u0627\u0626\u0639\/\u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0648 \u0627\u067e\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u06a9\u06cc\u0634\u06d2 \u06a9\u06cc\u0632 \u0688\u0648\u0645\u06cc\u0646 \u0627\u06cc\u0648\u0646\u0679\u0633 \u06a9\u0648 \u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u06a9\u06d2 \u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0628\u0627\u0637\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062c\u062f\u0648\u0644 12 \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u062f\u0648\u0631\u0627\u0646\u060c \u062c\u062f\u0648\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0627\u0646 \u0627\u0646\u0679\u0631-\u0633\u0631\u0648\u0633 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u0631\u0646\u0627 \u0622\u067e \u06a9\u06cc \u0645\u062f\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0635\u0627\u0631\u0641 \u06a9\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc<\/th>\n<th>\u062e\u062f\u0645\u0627\u062a \u0645\u062a\u0627\u062b\u0631<\/th>\n<th>\u063a\u0644\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0634\u06d2 \u06a9\u06cc \u06a9\u0644\u06cc\u062f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0622\u0631\u0688\u0631 \u062f\u06cc\u06ba\u06d4<\/td>\n<td>\u0622\u0631\u0688\u0631\u0632\u060c \u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc\u060c \u0635\u0627\u0631\u0641\u06cc\u0646<\/td>\n<td><code>orders<\/code>\u060c <code>stock<\/code>\u060c <code>loyalty-points<\/code>\u060c <code>cart<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0627\u06cc\u0688\u0631\u06cc\u0633 \u0627\u067e \u0688\u06cc\u0679<\/td>\n<td>\u0635\u0627\u0631\u0641\u060c \u0634\u067e\u0646\u06af<\/td>\n<td><code>user-profile<\/code>\u060c <code>shipping-estimates<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0627\u06cc\u06a9 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/td>\n<td>\u062c\u0627\u0626\u0632\u06d2\u060c \u0645\u0635\u0646\u0648\u0639\u0627\u062a<\/td>\n<td><code>reviews<\/code>\u060c <code>product<\/code> (\u06af\u0631\u06cc\u0688 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"heading-pattern-4-taming-multiple-api-contracts\">\u067e\u06cc\u0679\u0631\u0646 4: \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 API \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u067e\u0631 \u0642\u0627\u0628\u0648 \u067e\u0627\u0646\u0627<\/h2>\n<p>\u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06cc \u062f\u0646\u06cc\u0627 \u0645\u06cc\u06ba\u060c \u06c1\u0631 \u0633\u0631\u0648\u0633 \u0627\u067e\u0646\u06d2 API \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641 \u06a9\u06cc \u062e\u062f\u0645\u062a \u0648\u0627\u067e\u0633 \u0622 \u06af\u0626\u06cc \u06c1\u06d2\u06d4 <code>firstName<\/code> \u0627\u0648\u0631 <code>lastName<\/code>. \u0622\u0631\u0688\u0631 \u0633\u0631\u0648\u0633 \u0648\u0627\u067e\u0633 \u0622 \u06af\u0626\u06cc \u06c1\u06d2\u06d4 <code>customerName<\/code> \u0627\u06cc\u06a9 \u062a\u0627\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u06d4 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2: <code>fullName<\/code>. \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u0635\u0648\u0631\u060c \u062a\u06cc\u0646 \u0645\u062e\u062a\u0644\u0641 \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0646\u0627\u0645\u06d4<\/p>\n<h3 id=\"heading-the-adapter-layer\">\u0627\u0688\u0627\u067e\u0679\u0631 \u067e\u0631\u062a<\/h3>\n<p>\u0627\u06cc\u06a9 \u0627\u0688\u0627\u067e\u0679\u0631 \u067e\u0631\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba \u062c\u0648 \u06c1\u0631 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u062c\u0648\u0627\u0628 \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u0633\u062a\u0642\u0644 \u0688\u0648\u0645\u06cc\u0646 \u0645\u0627\u0688\u0644 \u0645\u06cc\u06ba \u062a\u0631\u062c\u0645\u06c1 \u06a9\u0631\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Domain models: what the frontend actually works with\ninterface User {\n  id: string;\n  fullName: string;\n  email: string;\n  address: Address;\n}\n\n\/\/ Adapter for the User Service\nfunction adaptUserServiceResponse(raw: UserServiceResponse): User {\n  return {\n    id: raw.userId,\n    fullName: `\\({raw.firstName} \\){raw.lastName}`,\n    email: raw.emailAddress,\n    address: {\n      line1: raw.address.street,\n      city: raw.address.city,\n      postcode: raw.address.zipCode,\n      country: raw.address.countryCode,\n    },\n  };\n}\n\n\/\/ Adapter for the Order Service (which embeds a different user shape)\nfunction adaptOrderCustomer(raw: OrderServiceCustomer): User {\n  return {\n    id: raw.customerId,\n    fullName: raw.customerName,\n    email: raw.email,\n    address: {\n      line1: raw.shippingAddress.addressLine1,\n      city: raw.shippingAddress.city,\n      postcode: raw.shippingAddress.postalCode,\n      country: raw.shippingAddress.country,\n    },\n  };\n}\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0627 \u062c\u0632\u0648 \u06c1\u06d2 <code>User<\/code> \u0632\u0645\u0631\u06c1 \u0648\u06c1 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u062e\u0627\u0645 \u062e\u062f\u0645\u062a \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0633\u0631\u0648\u0633 \u0627\u067e\u0646\u0627 API \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062a\u0648\u060c \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0645\u0627\u0645 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u0627\u0688\u0627\u067e\u0679\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-where-to-put-the-adapter-layer\">\u0627\u0688\u0627\u067e\u0679\u0631 \u067e\u0631\u062a \u06a9\u06c1\u0627\u06ba \u0631\u06a9\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 BFF \u06c1\u06d2 \u062a\u0648 \u0627\u0688\u0627\u067e\u0679\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u0624\u0632\u0631 \u062e\u0627\u0645 \u0633\u0631\u0648\u0633 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u0627\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0633\u0631\u0648\u0633 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0688\u06cc\u0679\u0627 \u0641\u06cc\u0686 \u0644\u06cc\u0626\u0631 \u0645\u06cc\u06ba HTTP \u06a9\u0627\u0644 \u0627\u0648\u0631 \u06a9\u06cc\u0634 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u0627\u0688\u0627\u067e\u0679\u0631 \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ The adapter runs before data enters the cache\nfunction useUser(userId: string) {\n  return useQuery({\n    queryKey: [\"user\", userId],\n    queryFn: async () => {\n      const raw = await fetch(`\/api\/users\/${userId}`).then((r) => r.json());\n      return adaptUserServiceResponse(raw);\n    },\n  });\n}\n<\/code><\/pre>\n<h2 id=\"heading-pattern-5-timeout-budgets-for-page-assembly\">\u067e\u06cc\u0679\u0631\u0646 5: \u0635\u0641\u062d\u06c1 \u0627\u0633\u0645\u0628\u0644\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u062c\u0679 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a<\/h2>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0645\u062a\u0639\u062f\u062f \u062e\u062f\u0645\u0627\u062a \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0635\u0641\u062d\u06c1 \u0644\u0648\u0688 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0648\u0642\u062a \u0633\u0633\u062a \u062a\u0631\u06cc\u0646 \u0633\u0631\u0648\u0633 \u0633\u06d2 \u0637\u06d2 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06cc \u062f\u0646\u06cc\u0627 \u0645\u06cc\u06ba \u06c1\u0645\u06cc\u0634\u06c1 \u0633\u0633\u062a \u062e\u062f\u0645\u0627\u062a \u06c1\u0648\u06ba \u06af\u06cc\u06d4<\/p>\n<p>\u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u0628\u062c\u0679 \u0635\u0641\u062d\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u062a\u0645\u0627\u0645 \u0688\u06cc\u0679\u0627 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0645\u062e\u062a\u0635 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u063a\u06cc\u0631 \u0627\u06c1\u0645 \u062e\u062f\u0645\u0627\u062a \u0622\u067e \u06a9\u06d2 \u0628\u062c\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062c\u0648\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u0646 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u067e\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0631\u062d\u0642\u06cc\u0642\u062a\u060c \u06cc\u06c1 \u0627\u0641\u0627\u062f\u06cc\u062a \u0645\u0634\u062a\u0631\u06a9\u06c1 \u062e\u062f\u0645\u0627\u062a \u06a9\u06cc \u067e\u0631\u062a \u067e\u0631 \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 <code>lib\/api.ts<\/code>) \u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0646\u0641\u0627\u0630 \u06c1\u06d2 \u062c\u0648 \u06c1\u0631 \u0635\u0641\u062d\u06d2 \u06a9\u06cc \u0627\u0633\u0645\u0628\u0644\u06cc \u0645\u0646\u0637\u0642 \u0645\u06cc\u06ba \u0627\u0646 \u0644\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2:<\/p>\n<pre><code class=\"language-typescript\">\/\/ lib\/api.ts: shared timeout utility\nasync function fetchWithTimeout<t>(\n  url: string,\n  options: RequestInit,\n  timeoutMs: number\n): Promise<t null=\"\"> {\n  const controller = new AbortController();\n  const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n  try {\n    const response = await fetch(url, {\n      ...options,\n      signal: controller.signal,\n    });\n    return response.json();\n  } catch (error) {\n    if (error instanceof DOMException && error.name === \"AbortError\") {\n      console.warn(`Request to \\({url} timed out after \\){timeoutMs}ms`);\n    }\n    return null;\n  } finally {\n    clearTimeout(timeout);\n  }\n}\n\n\/\/ Page assembly with tiered timeouts\nasync function assembleProductPage(productId: string): Promise<productpagedata> {\n  \/\/ Critical data: longer timeout, page fails without it\n  const product = await fetchWithTimeout<product>(\n    `\/api\/products\/${productId}`,\n    {},\n    3000 \/\/ 3 second budget for critical data\n  );\n\n  if (!product) {\n    throw new Error(\"Product not found\");\n  }\n\n  \/\/ Non-critical data: shorter timeout, page renders without it\n  const [reviews, recommendations, relatedProducts] = await Promise.all([\n    fetchWithTimeout<review>(\n      `\/api\/reviews?productId=${productId}`,\n      {},\n      1500 \/\/ 1.5 second budget\n    ),\n    fetchWithTimeout<product>(\n      `\/api\/recommendations?productId=${productId}`,\n      {},\n      1000 \/\/ 1 second budget: nice to have\n    ),\n    fetchWithTimeout<product>(\n      `\/api\/products\/${productId}\/related`,\n      {},\n      1000\n    ),\n  ]);\n\n  return {\n    product,\n    reviews: reviews ?? [],\n    recommendations: recommendations ?? [],\n    relatedProducts: relatedProducts ?? [],\n  };\n}\n<\/product><\/product><\/review><\/product><\/productpagedata><\/t><\/t><\/code><\/pre>\n<p>\u06c1\u0645\u0627\u0631\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0628\u062c\u0679 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06c1\u0645 \u0688\u06cc\u0679\u0627 (\u062e\u0648\u062f \u067e\u0631\u0648\u0688\u06a9\u0679) \u06a9\u0648 3 \u0633\u06cc\u06a9\u0646\u0688 \u0645\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u063a\u06cc\u0631 \u0627\u06c1\u0645 \u0688\u06cc\u0679\u0627 (\u062c\u0627\u0626\u0632\u06d2\u060c \u0633\u0641\u0627\u0631\u0634\u0627\u062a) \u06a9\u0648 1-1.5 \u0633\u06cc\u06a9\u0646\u0688 \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0633\u0641\u0627\u0631\u0634\u0627\u062a \u0633\u0633\u062a \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06c1\u0645 \u0633\u0641\u0627\u0631\u0634\u0627\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u067e\u0631\u0648\u0688\u06a9\u0679\u0633 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u0646 \u062e\u062f\u0645\u0627\u062a \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u062c\u0648 \u0627\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-pattern-6-error-boundaries-per-service\">\u067e\u06cc\u0679\u0631\u0646 6: \u0641\u06cc \u0633\u0631\u0648\u0633 \u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u062d\u062f\u0648\u062f<\/h2>\n<p>\u0631\u062f\u0639\u0645\u0644 \u06a9\u06cc \u063a\u0644\u0637\u06cc \u06a9\u06cc \u062d\u062f\u06cc\u06ba \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688\u0632 \u0645\u06cc\u06ba \u0637\u0627\u0642\u062a\u0648\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0635\u0641\u062d\u06c1 \u06a9\u06cc \u0633\u0637\u062d \u067e\u0631 \u0627\u06cc\u06a9 \u063a\u0644\u0637\u06cc \u06a9\u06cc \u062d\u062f \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0646 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u062d\u062f\u0648\u062f \u0644\u06af\u0627\u0626\u06cc\u06ba \u062c\u0648 \u0645\u062e\u062a\u0644\u0641 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0633\u0631\u0648\u0633\u0632 \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0628\u06be\u06cc \u063a\u0644\u0637\u06cc \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06c1\u06d2: \u062e\u0627\u0645\u06cc \u06a9\u06cc \u062d\u062f\u0648\u062f \u0644\u0627\u0632\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0637\u0628\u0642\u0627\u062a\u06cc \u0627\u062c\u0632\u0627\u0621 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba\u060c \u0627\u0648\u0631 React \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u0646 \u06a9\u0648 \u0641\u0646\u06a9\u0634\u0646 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u067e\u0648\u0631\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2 (\u0645\u0632\u06cc\u062f \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 React \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u062f\u06cc\u06a9\u06be\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-typescript\">class ErrorBoundary extends React.Component<\n  { fallback: React.ReactNode; children: React.ReactNode },\n  { hasError: boolean } > {\n  state = { hasError: false };\n\n  static getDerivedStateFromError() {\n    return { hasError: true };\n  }\n\n  componentDidCatch(error: Error, info: React.ErrorInfo) {\n    console.error(\"ErrorBoundary caught:\", error, info);\n  }\n\n  render() {\n    if (this.state.hasError) return this.props.fallback;\n    return this.props.children;\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u062e\u062f\u0645\u062a \u06a9\u06d2 \u062d\u0635\u0648\u06ba \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">function ProductPage({ productId }: { productId: string }) {\n  return (\n    <div>\n      {\/* If the product service fails, show a full-page error *\/}\n      <errorboundary fallback=\"{<ProductErrorPage\"\/>}>\n        <suspense fallback=\"{<ProductSkeleton\"\/>}>\n          <productdetails productid=\"{productId}\"\/>\n        \n      \n\n      {\/* If the review service fails, just hide reviews *\/}\n      <errorboundary fallback=\"{<EmptyState\" message=\"Reviews unavailable\"\/>}>\n        <suspense fallback=\"{<ReviewSkeleton\"\/>}>\n          <productreviews productid=\"{productId}\"\/>\n        \n      \n\n      {\/* If recommendations fail, hide silently *\/}\n      <errorboundary fallback=\"{null}\">\n        <suspense fallback=\"{<CarouselSkeleton\"\/>}>\n          <recommendations productid=\"{productId}\"\/>\n        \n      <\/errorboundary>\n    <\/div>\n  );\n}\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u0627\u067e\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u0633\u06d2 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u067e\u06a9\u0691\u062a\u06cc \u06c1\u06d2\u06d4 \u062c\u0627\u0626\u0632\u06c1 \u0633\u0631\u0648\u0633 \u0628\u0646\u062f \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0645\u062a\u0627\u062b\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06ba \u06af\u06cc\u06d4 \u0631\u06cc\u0641\u0631\u0644 \u0633\u0631\u0648\u0633 \u06a9\u0627 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u0628\u0627\u0644\u06a9\u0644 \u0628\u06be\u06cc \u06a9\u0648\u0626\u06cc \u063a\u0644\u0637\u06cc \u0646\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u06cc\u06a9\u0634\u0646 \u0635\u0631\u0641 \u0631\u06cc\u0646\u0688\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0646\u0642\u0634\u06c1 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0646\u0642\u06cc\u062f\u06cc\/\u063a\u06cc\u0631 \u062a\u0646\u0642\u06cc\u062f\u06cc \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u067e\u0631 \u06c1\u06d2\u06d4 \u0627\u06c1\u0645 \u062e\u062f\u0645\u0627\u062a \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062f\u06c1 \u063a\u0644\u0637\u06cc UI \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u063a\u0644\u0637\u06cc \u06a9\u06cc \u062d\u062f\u0648\u062f \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u063a\u06cc\u0631 \u0627\u06c1\u0645 \u062e\u062f\u0645\u0627\u062a \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0627\u0646\u062d\u0637\u0627\u0637 \u067e\u0630\u06cc\u0631 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u06cc\u0627 \u0627\u06cc\u06a9 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u062e\u0627\u0644\u06cc \u062d\u0627\u0644\u062a \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-working-with-backend-teams-on-contracts\">\u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u067e\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0639\u0627\u0648\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u062a\u06a9\u0646\u06cc\u06a9 \u067e\u06cc\u0679\u0631\u0646 \u0639\u0644\u0627\u0645\u0627\u062a \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2. \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0645\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0648\u062c\u06c1 API \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0648\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0646\u0627\u0642\u0635 \u0645\u0648\u0627\u0635\u0644\u062a \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-contract-conversations-to-have-early\">\u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06cc \u0628\u0627\u062a \u0686\u06cc\u062a \u062c\u0644\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<h4 id=\"heading-1-what-fields-will-the-frontend-actually-use\">1. \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u0648\u0646 \u0633\u06d2 \u0641\u06cc\u0644\u0688\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u061f<\/h4>\n<p>\u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0633\u0631\u0648\u0633\u0632 \u0627\u06a9\u062b\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u067e\u0648\u0631\u06d2 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u062a\u06cc\u0646 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645 \u062c\u0627\u0646\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0646 \u0641\u06cc\u0644\u0688\u0632 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0648\u06c1 \u0627\u0646 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u062d\u062a\u06cc\u0627\u0637 \u0633\u06d2 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u06af\u0631\u06cc\u0632 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u0627\u0628 \u06a9\u0648\u0626\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-2-what-is-the-expected-latency-budget-for-this-endpoint\">2. \u0627\u0633 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u0648\u0642\u0639 \u062a\u0627\u062e\u06cc\u0631 \u06a9\u0627 \u0628\u062c\u0679 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/h4>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u067e\u06cc\u062c \u06a9\u0627 \u0645\u062c\u0645\u0648\u0639\u06cc \u0628\u062c\u0679 2 \u0633\u06cc\u06a9\u0646\u0688 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u06cc \u0646\u0645\u0627\u06cc\u0627\u06ba \u0633\u0631\u0648\u0633 \u06a9\u0627 \u0627\u0648\u0633\u0637 \u0633\u0631\u0648\u0633 \u0679\u0627\u0626\u0645 1.8 \u0633\u06cc\u06a9\u0646\u0688 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u0648\u0688 \u0644\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u0645\u0633\u0626\u0644\u06c1 \u062f\u0631\u067e\u06cc\u0634 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u062c\u0644\u062f \u0633\u0637\u062d \u067e\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-3-what-happens-when-this-service-is-degraded\">3. \u0627\u06af\u0631 \u06cc\u06c1 \u0633\u0631\u0648\u0633 \u06a9\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u061f<\/h4>\n<p>\u06c1\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645 \u0633\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0633\u0648\u0627\u0644\u0627\u062a \u067e\u0648\u0686\u06be\u06cc\u06ba: &quot;\u0627\u06af\u0631 \u0645\u06cc\u0631\u06cc \u0633\u0631\u0648\u0633 \u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06d2 \u0645\u06cc\u06ba 500 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0645\u062c\u06be\u06d2 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u06a9\u06cc\u0627 \u0688\u0633\u067e\u0644\u06d2 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u061f&#8221; \u06cc\u06c1 \u0633\u0648\u0627\u0644 \u0627\u06a9\u062b\u0631 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0628\u06be\u06cc \u06a9\u0633\u06cc \u0646\u06d2 \u0633\u0648\u0686\u0627 \u06c1\u06cc \u0646\u06c1\u06cc\u06ba\u060c \u0627\u0633\u06cc \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u067e\u0648\u0686\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h4 id=\"heading-4-how-will-you-communicate-breaking-changes\">4. \u0622\u067e \u0628\u0691\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u062a\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u061f<\/h4>\n<p>\u0645\u06cc\u06ba \u0639\u0645\u0644 \u0633\u06d2 \u0645\u062a\u0641\u0642 \u06c1\u0648\u06ba\u06d4 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06cc\u06ba &#8211; \u067e\u0644 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u0645\u06cc\u06ba \u0627\u0648\u067e\u0646 \u0627\u06d2 \u067e\u06cc \u0622\u0626\u06cc \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0645\u06cc\u06ba \u0641\u0631\u0642\u060c API \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0644\u06cc\u06a9 \u0686\u06cc\u0646\u0644\u0632\u060c \u0648\u0631\u0698\u0646 \u0648\u0627\u0644\u06d2 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u067e\u0648\u0627\u0626\u0646\u0679\u0633 &#8211; \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-api-contracts-as-shared-artifacts\">\u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u0645\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0637\u0648\u0631 API \u0645\u0639\u0627\u06c1\u062f\u06d2<\/h3>\n<p>\u067e\u0634 \u0645\u0634\u06cc\u0646 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0645\u0639\u0627\u06c1\u062f\u06d2\u06d4 OpenAPI \u062a\u0641\u0635\u06cc\u0644\u0627\u062a\u060c GraphQL \u0627\u0633\u06a9\u06cc\u0645\u0627\u060c \u06cc\u0627 \u067e\u0631\u0648\u0679\u0648\u06a9\u0648\u0644 \u0628\u0641\u0631 \u0688\u06cc\u0641\u06cc\u0646\u06cc\u0634\u0646 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0648\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0630\u0631\u06cc\u0639\u06c1 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><strong>\u062e\u0648\u062f\u06a9\u0627\u0631 \u0642\u0633\u0645 \u06a9\u06cc \u0646\u0633\u0644:<\/strong> \u0627\u0648\u0632\u0627\u0631 \u062c\u06cc\u0633\u06d2 <code>openapi-typescript<\/code> OpenAPI \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0633\u06d2 TypeScript \u06a9\u06cc \u0642\u0633\u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u0633\u06cc \u0641\u06cc\u0644\u0688 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u063a\u06cc\u0631 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06cc \u062c\u0627\u0646\u0686:<\/strong> \u0627\u0648\u0632\u0627\u0631 \u062c\u06cc\u0633\u06d2 <code>Pact<\/code> \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u0633\u06d2\u060c \u0622\u067e \u0645\u062a\u0648\u0642\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\/\u062c\u0648\u0627\u0628 \u06a9\u06d2 \u062c\u0648\u0691\u0648\u06ba \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0627\u0646 \u0679\u06cc\u0633\u0679\u0648\u06ba \u06a9\u0648 CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06cc \u062a\u0648\u0642\u0639\u0627\u062a \u06a9\u0648 \u062a\u0648\u0691 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u0631\u0636\u06cc \u0633\u0631\u0648\u0631:<\/strong> \u0686\u0634\u0645\u0648\u06ba \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u0645\u0648\u06a9\u0633 \u0622\u067e \u06a9\u0648 \u067e\u0633\u062f\u06cc\u062f \u06a9\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u0627\u0635\u0644 \u0633\u0631\u0648\u0633 \u0634\u0631\u0648\u0639 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u06a9\u0648\u0688 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-typescript\">\/\/ Generated types from OpenAPI spec, always in sync with the backend\nimport type { components } from \".\/generated\/inventory-api\";\n\ntype Product = components[\"schemas\"][\"Product\"];\ntype StockLevel = components[\"schemas\"][\"StockLevel\"];\n\n\/\/ If the backend renames \"available\" to \"inStock\",\n\/\/ this code fails at compile time, not in production\nfunction formatStockMessage(stock: StockLevel): string {\n  if (stock.available > 10) return \"In Stock\";\n  if (stock.available > 0) return `Only ${stock.available} left`;\n  return \"Out of Stock\";\n}\n<\/code><\/pre>\n<h3 id=\"heading-testing-against-multiple-services\">\u0645\u062a\u0639\u062f\u062f \u062e\u062f\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0627\u0646\u0686<\/h3>\n<p>\u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u0679\u06cc\u0633\u0679\u0646\u06af \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0628\u0631\u06cc\u06a9\u0646\u06af \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u067e\u06a9\u0691\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0648 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u0631\u0648\u06cc\u06d2 \u06a9\u06cc \u0628\u06be\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0628 \u0633\u0631\u0648\u0633 \u063a\u06cc\u0631 \u0645\u062a\u0648\u0642\u0639 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0633\u06d2 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0648\u06a9 \u0633\u0631\u0648\u0633 \u0648\u0631\u06a9\u0631 (MSW) \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0645\u0648\u06a9 \u06c1\u06cc\u0646\u0688\u0644\u0631\u0632 \u06a9\u0648 \u0627\u0633\u067e\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { setupServer } from \"msw\/node\";\nimport { http, HttpResponse } from \"msw\";\n\n\/\/ Mock each service independently\nconst server = setupServer(\n  http.get(\"\/api\/products\/:id\", () =>\n    HttpResponse.json({ productId: \"abc-123\", name: \"Widget\", price: 49.99 })\n  ),\n  http.get(\"\/api\/reviews\", () =>\n    HttpResponse.json([{ rating: 5, body: \"Great product\" }])\n  )\n);\n\n\/\/ Test: what happens when the review service is down?\ntest(\"renders product page when reviews service fails\", async () => {\n  server.use(\n    http.get(\"\/api\/reviews\", () => HttpResponse.error())\n  );\n\n  render(<productpage productid=\"abc-123\"\/>);\n\n  expect(await screen.findByText(\"Widget\")).toBeInTheDocument();\n  expect(await screen.findByText(\"Reviews unavailable\")).toBeInTheDocument();\n});\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u06c1\u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 \u0679\u06cc\u0633\u0679 \u0633\u0648\u06cc\u0679 \u0645\u06cc\u06ba \u067e\u06cc\u0679\u0631\u0646 2 \u06a9\u06d2 \u062c\u0632\u0648\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06d2 \u06a9\u06cc \u0646\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062e\u0627\u0645 \u0633\u0631\u0648\u0633 \u0631\u0633\u067e\u0627\u0646\u0633 \u0633\u06c1\u0648\u0644\u06cc\u0627\u062a \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0688\u0627\u067e\u0679\u0631 \u067e\u0631\u062a (\u067e\u06cc\u0679\u0631\u0646 4) \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0646\u0636\u0645\u0627\u0645 \u0679\u06cc\u0633\u0679\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 MSW \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u062c\u0628 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u062e\u062f\u0645\u0627\u062a \u0633\u0633\u062a\u060c \u0646\u06cc\u0686\u06d2\u060c \u06cc\u0627 \u063a\u06cc\u0631 \u0645\u062a\u0648\u0642\u0639 \u0634\u06a9\u0644\u06cc\u06ba \u0648\u0627\u067e\u0633 \u0622\u062a\u06cc \u06c1\u06cc\u06ba \u062a\u0648 \u067e\u0648\u0631\u0627 \u0635\u0641\u062d\u06c1 \u062f\u0631\u0633\u062a \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062c\u0645\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-when-to-push-back\">\u06a9\u0628 \u067e\u06cc\u0686\u06be\u06d2 \u062f\u06be\u06a9\u06cc\u0644\u0646\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p>\u06c1\u0631 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0627 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u062d\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0628\u06be\u06cc \u06a9\u0628\u06be\u06cc \u0635\u062d\u06cc\u062d \u062c\u0648\u0627\u0628 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u067e\u06cc\u0686\u06be\u06d2 \u0686\u06be\u0648\u0691\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u06cc\u06a9 \u0635\u0641\u062d\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 5 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 API \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u067e\u0634 \u0628\u06cc\u06a9\u06d4<\/strong> \u06cc\u06c1 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0639\u0644\u0627\u0645\u062a \u06c1\u06d2 \u06a9\u06c1 \u0633\u0631\u0648\u0633 \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u062f\u0627\u0646\u06d2 \u062f\u0627\u0631 \u06c1\u06d2 \u06cc\u0627 \u0627\u0633 \u0645\u06cc\u06ba \u0645\u062c\u0645\u0648\u0639\u06cc \u067e\u0631\u062a \u063a\u0627\u0626\u0628 \u06c1\u06d2\u06d4 \u062d\u0644 BFF \u06cc\u0627 \u062c\u0627\u0645\u0639 API \u06c1\u06d2\u06d4 <code>Promise.all<\/code> \u0628\u0631\u0627\u0624\u0632\u0631 \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u06cc \u06af\u0626\u06cc\u06d4<\/p>\n<p><strong>\u062c\u0628 \u062f\u0648 \u0633\u0631\u0648\u0633\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u06c1\u0633\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u0636\u0627\u062f \u0688\u06cc\u0679\u0627 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0648\u06c1 \u067e\u06cc\u0686\u06be\u06d2 \u06c1\u0679 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/strong> \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0635\u0627\u0631\u0641 \u0633\u0631\u0648\u0633 \u06a9\u06c1\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 &quot;\u062c\u06cc\u0646&#8221; \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u06cc \u0622\u0631\u0688\u0631 \u0633\u0631\u0648\u0633 \u06a9\u06c1\u062a\u06cc \u06c1\u06d2 &quot;\u062c\u06cc\u0646\u0679&#8221;\u060c \u062a\u0648 \u06cc\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0645\u0633\u062a\u0642\u0644 \u0645\u0632\u0627\u062c\u06cc \u06a9\u0627 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2 \u062c\u0633\u06d2 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u062d\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4 \u062a\u0631\u0645\u06cc\u0645\u0627\u062a \u0645\u0627\u062e\u0630 \u067e\u0631 \u06a9\u06cc \u062c\u0627\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba\u060c \u06cc\u0627 \u062a\u0648 \u062e\u062f\u0645\u0627\u062a \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0648\u0627\u0642\u0639\u06c1 \u067e\u0631 \u0645\u0628\u0646\u06cc \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2\u060c \u06cc\u0627 \u0627\u0633 \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u06a9\u0648 \u0645\u0633\u062a\u0646\u062f \u0630\u0631\u06cc\u0639\u06c1 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06d2 \u06a9\u0631\u06d4<\/p>\n<p><strong>\u062c\u0628 \u0622\u067e \u06a9\u06cc \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0648\u0627\u0631\u0646\u0646\u06af \u06a9\u06d2 \u0627\u06c1\u0645 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u067e\u06cc\u0686\u06be\u06d2 \u06c1\u0679\u06cc\u06ba\u06d4<\/strong> \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0633\u0631\u0648\u0633 \u06a9\u0633\u06cc \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u06cc\u067e \u06a9\u0648 \u062a\u0648\u0691 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0639\u0645\u0648\u0644\u06cc \u0648\u0631\u0698\u0646 \u06a9\u06d2 \u0679\u06a9\u0631\u0627\u0646\u06d2 \u067e\u0631 \u0641\u06cc\u0644\u0688 \u06a9\u0627 \u0646\u0627\u0645 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0639\u0645\u0644 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u0688\u0648\u0648\u06a9\u06cc\u0679 \u0648\u0631\u0698\u0646 \u0648\u0627\u0644\u06d2 APIs\u060c \u0641\u0631\u0633\u0648\u062f\u06af\u06cc \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c \u0627\u0648\u0631 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06a9\u06cc \u062c\u0627\u0646\u0686\u06d4<\/p>\n<p>\u0622\u067e \u0635\u0631\u0641 \u0627\u06cc\u06a9 API \u0635\u0627\u0631\u0641 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 API \u06a9\u0648 \u06a9\u0633 \u0637\u0631\u062d \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0633 \u0645\u06cc\u06ba \u0622\u067e \u0627\u0633\u0679\u06cc\u06a9 \u06c1\u0648\u0644\u0688\u0631 \u06c1\u06cc\u06ba\u06d4 \u062c\u062a\u0646\u06cc \u062c\u0644\u062f\u06cc \u0622\u067e API \u0688\u06cc\u0632\u0627\u0626\u0646 \u06af\u0641\u062a\u06af\u0648 \u0645\u06cc\u06ba \u0645\u0634\u063a\u0648\u0644 \u06c1\u0648\u06ba \u06af\u06d2\u060c \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0627\u062a\u0646\u06d2 \u06c1\u06cc \u06a9\u0645 \u0645\u0633\u0627\u0626\u0644 \u0633\u06d2 \u0646\u0645\u0679\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u0645\u06cc\u06ba \u067e\u06cc\u0679\u0631\u0646 \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645 \u0646\u0642\u0637\u06c1 \u0622\u063a\u0627\u0632 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0627\u0635\u0648\u0644 \u062a\u0645\u0627\u0645 \u0646\u0645\u0648\u0646\u0648\u06ba \u0645\u06cc\u06ba \u06cc\u06a9\u0633\u0627\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062c\u06be\u0644\u06a9\u06cc\u0627\u06ba:<\/p>\n<ol>\n<li>\n<p><strong>\u0645\u062c\u0645\u0648\u0639\u06cc \u067e\u0631\u062a \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2\u06d4<\/strong> BFF \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u0648 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u06cc \u0634\u06a9\u0644 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u06cc \u0633\u0637\u062d \u067e\u0631 \u062c\u0632\u0648\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0645\u0627\u0645 \u0688\u06cc\u0679\u0627 \u0630\u0631\u0627\u0626\u0639 \u06a9\u0648 \u0627\u06c1\u0645 \u06cc\u0627 \u063a\u06cc\u0631 \u0627\u06c1\u0645 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u06cc\u06c1 \u0648\u0627\u062d\u062f \u0641\u06cc\u0635\u0644\u06c1 \u06c1\u0631 \u0635\u0641\u062d\u06c1 \u067e\u0631 \u06c1\u0631 \u062d\u0635\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u063a\u0644\u0637\u06cc \u0633\u06d2 \u0646\u0645\u0679\u0646\u06d2\u060c \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u0628\u062c\u0679\u060c \u0627\u0648\u0631 \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062d\u062f\u0648\u062f \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/strong> \u062e\u0627\u0645 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u0627\u0648\u0631 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u0627\u0688\u0627\u067e\u0679\u0631 \u067e\u0631\u062a \u0622\u067e \u06a9\u0648 \u0627\u067e \u0627\u0633\u0679\u0631\u06cc\u0645 API \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u0633\u06d2 \u0628\u0686\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0645\u0633\u062a\u0642\u0644 \u0688\u0648\u0645\u06cc\u0646 \u0645\u0627\u0688\u0644 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u0645\u06cc\u06ba \u0633\u0631\u0645\u0627\u06cc\u06c1 \u06a9\u0627\u0631\u06cc \u06a9\u0631\u06cc\u06ba:<\/strong> \u0645\u0634\u06cc\u0646 \u0633\u06d2 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 API \u0645\u0639\u0627\u06c1\u062f\u06d2\u060c \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u0627\u0642\u0633\u0627\u0645\u060c \u0627\u0648\u0631 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0648\u0642\u062a \u067e\u0631 \u0628\u0631\u06cc\u06a9\u0646\u06af \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u067e\u06a9\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0646\u06c1 \u06a9\u06c1 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0636\u0631\u0648\u0631\u062a \u067e\u0691\u0646\u06d2 \u067e\u0631 \u067e\u06cc\u0686\u06be\u06d2 \u062f\u06be\u06a9\u06cc\u0644\u06cc\u06ba:<\/strong> \u06c1\u0631 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0627 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u062d\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 UI \u067e\u0631\u062a \u067e\u0631 \u063a\u06cc\u0631 \u0645\u0639\u0642\u0648\u0644 \u0628\u0648\u062c\u06be \u0688\u0627\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u062c\u0644\u062f \u0628\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631\u0644 \u0641\u06cc\u0635\u0644\u06c1 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0634\u062f\u062a \u0633\u06d2 \u0645\u062d\u0633\u0648\u0633 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u0645\u06cc\u06ba \u0646\u0645\u0648\u0646\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u06a9\u0648 \u062e\u062a\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0627\u0633\u06d2 \u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645 \u0637\u0631\u06cc\u0642\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0632 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u0627\u0633 \u06a9\u06d2 \u0648\u0627\u0631\u062b \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u062f\u0646 \u0622\u067e \u0627\u06cc\u06a9 API \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0646\u06a9\u0627\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06af\u0644\u06d2 \u062f\u0646 \u0622\u067e \u067e\u0627\u0646\u0686 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0648 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0645\u0639\u0627\u06c1\u062f\u06c1\u060c \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u0648\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u062e\u06cc\u0627\u0644 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-23509","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/23509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=23509"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/23509\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=23509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=23509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=23509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}