{"id":29596,"date":"2022-04-16T17:26:49","date_gmt":"2022-04-16T12:56:49","guid":{"rendered":"https:\/\/wpadmin.maktabkhooneh.org\/mag\/?p=29596"},"modified":"2026-04-06T18:04:23","modified_gmt":"2026-04-06T14:34:23","slug":"how-to-build-restful-api-in-laravel","status":"publish","type":"post","link":"https:\/\/maktabkhooneh.org\/mag\/how-to-build-restful-api-in-laravel\/","title":{"rendered":"\u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644"},"content":{"rendered":"\n<p>\u0644\u0627\u0631\u0627\u0648\u0644 \u06cc\u06a9 \u0641\u0631\u06cc\u0645\u0648\u0631\u06a9 PHP \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0646 \u062d\u062f\u0627\u06a9\u062b\u0631 \u0628\u0647\u0631\u0647 \u0648\u0631\u06cc \u062a\u0648\u0633\u0637 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0647 \u062a\u0648\u0633\u0637 \u062a\u06cc\u0644\u0648\u0631 \u0627\u062a\u0648\u0644 \u0646\u0648\u0634\u062a\u0647 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0637\u0648\u0631\u06cc \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u06a9\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u06a9\u0627\u0631 \u0686\u0646\u062f\u0627\u0646\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u06cc\u0627\u0646 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u062f \u0648 \u0627\u06cc\u0646 \u0627\u0645\u0631 \u062f\u0631 \u0632\u0645\u0627\u0646 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0635\u0631\u0641\u0647\u200c\u062c\u0648\u06cc\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<p>\u0647\u062f\u0641 \u0627\u06cc\u0646 \u0686\u0627\u0631\u0686\u0648\u0628 \u06a9\u0645\u06a9 \u0628\u0647 \u062a\u06a9\u0627\u0645\u0644 \u0648\u0628 \u0627\u0633\u062a \u0648 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0686\u0646\u062f\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0648 \u0627\u06cc\u062f\u0647 \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631 \u062f\u0646\u06cc\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u0648\u0628&nbsp; \u0645\u0627\u0646\u0646\u062f \u0635\u0641 \u0647\u0627\u06cc \u0634\u063a\u0644\u06cc\u060c \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a API \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0639\u0628\u0647\u060c \u0627\u0631\u062a\u0628\u0627\u0637\u0627\u062a \u0628\u0644\u0627\u062f\u0631\u0646\u06af\u060c \u0648 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f. \u062f\u0631 \u0645\u0642\u0627\u0644\u0647 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644\u060c \u0631\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0644\u0627\u0631\u0627\u0648\u0644 \u06cc\u06a9 API \u0642\u0648\u06cc \u0633\u0627\u062e\u062a \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0631\u062f\u060c \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0645\u0627 \u0627\u0632 Laravel 5.4 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u0648 \u0647\u0645\u0647 \u06a9\u062f\u0647\u0627 \u0628\u0631\u0627\u06cc \u0645\u0631\u062c\u0639 \u062f\u0631 GitHub \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0647\u0633\u062a\u0646\u062f.<\/p>\n\n\n\n<p>\u0628\u0627 \u0638\u0647\u0648\u0631 \u0641\u0631\u06cc\u0645\u0648\u0631\u06a9\u200c\u0647\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 API RESTful \u0628\u0647\u062a\u0631\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0648\u0627\u062d\u062f \u0628\u06cc\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0634\u0645\u0627 \u0648 \u0645\u0634\u062a\u0631\u06cc \u0634\u0645\u0627 \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">API \u0647\u0627\u06cc RESTful<\/h2>\n\n\n\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0628\u0641\u0647\u0645\u06cc\u0645 \u06a9\u0647 \u062f\u0642\u06cc\u0642\u0627 \u06cc\u06a9 RESTful API \u0686\u06cc\u0633\u062a \u0648 \u0686\u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0628\u0647 \u0632\u0628\u0627\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 REST \u0645\u062e\u0641\u0641 REpresentational State Transfer \u0627\u0633\u062a \u0648 \u06cc\u06a9 \u0633\u0628\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0634\u0628\u06a9\u0647 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u0647 \u06cc\u06a9 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0628\u062f\u0648\u0646 \u062d\u0627\u0644\u062a (\u0645\u0639\u0645\u0648\u0644\u0627 HTTP) \u0645\u062a\u06a9\u06cc \u0627\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u062a\u062f\u0647\u0627\u06cc HTTP<\/h3>\n\n\n\n<p>\u062f\u0631 API \u0647\u0627\u06cc RESTful\u060c \u0627\u0632 \u0645\u062a\u062f\u0647\u0627\u06cc HTTP \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u0646\u0627\u0628\u0639\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0622\u0646\u0647\u0627 \u0639\u0645\u0644 \u0645\u06cc \u0634\u0648\u062f. \u0645\u0627 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u062a\u062f\u0647\u0627\u06cc HTTP \u0628\u0631 \u0627\u0633\u0627\u0633 \u0645\u0639\u0627\u0646\u06cc \u0622\u0646 \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0646\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GET: retrieve resources<\/li>\n\n\n\n<li>POST: create resources<\/li>\n\n\n\n<li>PUT: update resources<\/li>\n\n\n\n<li>DELETE: delete resources<\/li>\n<\/ul>\n\n\n\n<p>\u0645\u062a\u062f\u0647\u0627\u06cc http \u062f\u0631 restful api<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u062a\u062f PUT \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 POST<\/h3>\n\n\n\n<p>API \u0647\u0627\u06cc RESTful \u0628\u0633\u06cc\u0627\u0631 \u0645\u0648\u0631\u062f \u0645\u0646\u0627\u0642\u0634\u0647 \u0647\u0633\u062a\u0646\u062f \u0648 \u0646\u0638\u0631\u0627\u062a \u0632\u06cc\u0627\u062f\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u0628\u0647\u062a\u0631 \u0627\u0633\u062a \u0628\u0627 POST\u060c PATCH \u06cc\u0627 PUT \u0628\u0647 \u0631\u0648\u0632 \u0634\u0648\u062f \u06cc\u0627 \u0627\u06cc\u0646\u06a9\u0647 \u0639\u0645\u0644 \u0627\u06cc\u062c\u0627\u062f \u0628\u0647 \u0641\u0639\u0644 PUT \u0648\u0627\u06af\u0630\u0627\u0631 \u0634\u0648\u062f\u060c \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0627\u0632 PUT \u0628\u0631\u0627\u06cc \u0639\u0645\u0644 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u0632\u06cc\u0631\u0627 \u0637\u0628\u0642 HTTP RFC\u060c PUT \u0628\u0647 \u0645\u0639\u0646\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f\/\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u062f\u0631 \u06cc\u06a9 \u0645\u06a9\u0627\u0646 \u062e\u0627\u0635 \u0627\u0633\u062a. \u06cc\u06a9\u06cc \u062f\u06cc\u06af\u0631 \u0627\u0632 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0641\u0639\u0644 PUT\u060c idempotence \u0627\u0633\u062a\u060c \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u0627\u0633\u0627\u0633\u0627\u064b \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0627 \u06f1\u060c \u06f2 \u06cc\u0627 \u06f1\u06f0\u06f0\u06f0 \u0628\u0627\u0631 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u0646\u062a\u06cc\u062c\u0647 \u06cc\u06a9\u0633\u0627\u0646 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0646\u0627\u0628\u0639<\/h3>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0645\u0646\u0627\u0628\u0639&nbsp; \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0648 \u0645\u0642\u0627\u0644\u0627\u062a \u0647\u062f\u0641 \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u0627 \u0647\u0633\u062a\u0646\u062f \u0648 \u0622\u0646 \u0647\u0627 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062e\u0648\u062f \u0631\u0627 \u062f\u0627\u0631 \u0646\u062f.<\/p>\n\n\n\n<p class=\"has-text-align-left\">\/articles<\/p>\n\n\n\n<p class=\"has-text-align-left\">\/users<\/p>\n\n\n\n<p>&nbsp;\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0645\u0646\u0627\u0628\u0639\u06cc \u0631\u0627 \u062f\u0631 \u0628\u06cc\u0634 \u0627\u0632 \u06cc\u06a9 \u0645\u062f\u0644 \u062f\u0627\u062f\u0647 (\u06cc\u0627 \u0627\u0635\u0644\u0627\u064b \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0631\u0627\u0626\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a) \u0648 \u0645\u062f\u0644 \u0647\u0627\u06cc\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u062e\u0627\u0631\u062c \u0627\u0632 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u06cc \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u0646\u0627\u0628\u0639 \u0648 \u0645\u062f\u0644\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 \u06af\u0648\u0646\u0647\u200c\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627 \u0628\u0627\u0634\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0646\u06a9\u0627\u062a\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0633\u0627\u0632\u06af\u0627\u0631\u06cc REST<\/h3>\n\n\n\n<p>\u0628\u0632\u0631\u06af\u062a\u0631\u06cc\u0646 \u0645\u0632\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u0647\u0627 \u0645\u0627\u0646\u0646\u062f REST \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0635\u0631\u0641 \u0648 \u062a\u0648\u0633\u0639\u0647 API \u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0622\u0633\u0627\u0646 \u062a\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f. \u0637\u0631\u0627\u062d\u06cc \u0628\u0631\u062e\u06cc \u0627\u0632 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0647\u0633\u062a\u0646\u062f \u0648 \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc API \u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u0645\u0648\u0632\u0634 \u06a9\u0627\u0631 \u0628\u0627 rest \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0648 \u0646\u062d\u0648\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0622\u0646<\/h2>\n\n\n\n<p>\u0645\u0627\u0646\u0646\u062f \u0647\u0645\u0647 \u0641\u0631\u06cc\u0645\u0648\u0631\u06a9\u200c\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 PHP\u060c \u0628\u0631\u0627\u06cc \u0646\u0635\u0628 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627\u06cc\u0645\u0627\u0646 \u0628\u0647 Composer \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645. \u060c \u06a9\u0627\u0645\u067e\u0648\u0632\u0631 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u06a9\u0627\u0645\u0646\u062f\u0644\u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9\u0633\u0631\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0646\u0627\u0628\u0639 \u062e\u0627\u0631\u062c\u06cc \u067e\u0631\u062f\u0627\u062e\u062a.<\/p>\n\n\n\n<p>\u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u062f\u0627\u0646\u0644\u0648\u062f \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u06cc\u0645&nbsp; \u0648 \u0622\u0646 \u0628\u0647 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637 \u0645\u0633\u06cc\u0631 \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u06cc\u0645\u060c \u0644\u0627\u0631\u0627\u0648\u0644 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0646\u0635\u0628 \u0645\u06cc\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ composer global require laravel\/installer\n<\/code><\/pre>\n\n\n\n<p>\u067e\u0633 \u0627\u0632 \u0627\u062a\u0645\u0627\u0645 \u0646\u0635\u0628\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u062f\u06cc\u062f \u0645\u0627\u0646\u0646\u062f \u0632\u06cc\u0631 \u0628\u0633\u0627\u0632\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ laravel new myapp\n<\/code><\/pre>\n\n\n\n<p>\u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 \u0628\u0627\u0644\u0627\u060c \u0628\u0627\u06cc\u062f ~\/composer\/vendor\/bin \u0631\u0627 \u062f\u0631 $PATH \u062e\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Composer \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ composer create-project --prefer-dist laravel\/laravel myapp\n<\/code><\/pre>\n\n\n\n<p>\u0628\u0627 \u0646\u0635\u0628 \u0644\u0627\u0631\u0627\u0648\u0644\u060c \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0622\u06cc\u0627 \u0633\u0631\u0648\u0631 \u0645\u0627 \u06a9\u0627\u0631 \u0645\u06cc\u06a9\u0646\u062f \u06cc\u0627 \u062e\u06cc\u0631:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan serve<\/code><\/pre>\n\n\n\n<p>\u0633\u0631\u0648\u0631 \u062a\u0648\u0633\u0639\u0647 \u0644\u0627\u0631\u0627\u0648\u0644 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u062f \u0648 \u062f\u0631 \u0622\u062f\u0631\u0633 \u0632\u06cc\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0627\u0633\u062a: http:\/\/127.0.0.1:8000. \u0648\u0642\u062a\u06cc localhost:8000 \u0631\u0627 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u062e\u0648\u062f \u0628\u0627\u0632 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0646\u0645\u0648\u0646\u0647 \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403326507-7240f508da6184f5b7bdb49b10304ea0.webp\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1720\" height=\"725\" src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403326507-7240f508da6184f5b7bdb49b10304ea0.webp\" alt=\"\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644\" class=\"wp-image-29601\" title=\"\" srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403326507-7240f508da6184f5b7bdb49b10304ea0.webp 1720w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403326507-7240f508da6184f5b7bdb49b10304ea0-300x126.webp 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403326507-7240f508da6184f5b7bdb49b10304ea0-1024x432.webp 1024w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403326507-7240f508da6184f5b7bdb49b10304ea0-768x324.webp 768w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403326507-7240f508da6184f5b7bdb49b10304ea0-1536x647.webp 1536w\" sizes=\"(max-width: 1720px) 100vw, 1720px\" \/><\/a><figcaption><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0648 \u0645\u062f\u0644 \u0647\u0627 \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644<\/h3>\n\n\n\n<p>Migration \u06cc\u06a9 \u0645\u0641\u0647\u0648\u0645 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0641\u06cc\u062f \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0646\u0648\u0627\u0639 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Migration \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062c\u062f\u06cc\u062f \u0628\u0633\u0627\u0632\u06cc\u062f \u0648 \u06cc\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0648 \u062d\u062a\u06cc \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f.<\/p>\n\n\n\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0648\u0644\u06cc\u0646 \u06a9\u062f \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 &nbsp;\u062e\u0648\u062f \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645\u060c \u0628\u0627\u06cc\u062f \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u0645 \u06a9\u0647 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0641\u0627\u06cc\u0644 env \u0648\u0627\u0642\u0639 \u062f\u0631 \u0631\u06cc\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=homestead\nDB_USERNAME=homestead\nDB_PASSWORD=secret<\/code><\/pre>\n\n\n\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0627\u0648\u0644\u06cc\u0646 \u0645\u062f\u0644 \u0648 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u062e\u0648\u062f&nbsp; \u0645\u0642\u0627\u0644\u0647 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645. \u0645\u0642\u0627\u0644\u0647 \u0628\u0627\u06cc\u062f \u062f\u0627\u0631\u0627\u06cc \u0639\u0646\u0648\u0627\u0646 \u0648 \u0642\u0633\u0645\u062a \u0645\u062a\u0646 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u062a\u0627\u0631\u06cc\u062e \u0627\u06cc\u062c\u0627\u062f \u0628\u0627\u0634\u062f. \u0644\u0627\u0631\u0627\u0648\u0644 \u0686\u0646\u062f\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 Artisan &#8211; \u0627\u0628\u0632\u0627\u0631 \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u0644\u0627\u0631\u0627\u0648\u0644\u060c \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0628\u0627 \u062a\u0648\u0644\u06cc\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627 \u0648 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0622\u0646\u0647\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 \u0647\u0627\u06cc \u0635\u062d\u06cc\u062d \u0628\u0647 \u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u062f\u0644 Article \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan make:model Article -m\n<\/code><\/pre>\n\n\n\n<p>\u06af\u0632\u06cc\u0646\u0647 -m \u0645\u062e\u0641\u0641 &#8211;migration \u0627\u0633\u062a \u0648 \u0628\u0647 Artisan \u0645\u06cc \u06af\u0648\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0628\u0631\u0627\u06cc \u0645\u062f\u0644 \u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Support<\/span>\\<span class=\"hljs-title\">Facades<\/span>\\<span class=\"hljs-title\">Schema<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Database<\/span>\\<span class=\"hljs-title\">Schema<\/span>\\<span class=\"hljs-title\">Blueprint<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Database<\/span>\\<span class=\"hljs-title\">Migrations<\/span>\\<span class=\"hljs-title\">Migration<\/span>;\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CreateArticlesTable<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Migration<\/span>\n<\/span>{\n    <span class=\"hljs-comment\">\/**\n     * Run the migrations.\n     *\n     * <span class=\"hljs-doctag\">@return<\/span> void\n     *\/<\/span>\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">up<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        Schema::create(<span class=\"hljs-string\">'articles'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">(Blueprint $table)<\/span> <\/span>{\n            $table-&gt;increments(<span class=\"hljs-string\">'id'<\/span>);\n            $table-&gt;timestamps();\n        });\n    }\n\n    <span class=\"hljs-comment\">\/**\n     * Reverse the migrations.\n     *\n     * <span class=\"hljs-doctag\">@return<\/span> void\n     *\/<\/span>\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">down<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        Schema::dropIfExists(<span class=\"hljs-string\">'articles'<\/span>);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u062a\u0634\u0631\u06cc\u062d \u06a9\u062f \u0628\u0627\u0644\u0627 \u0627\u0632 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644:<\/p>\n\n\n\n<p class=\"has-text-align-right\">:up() &amp; down()- \u0628\u0647 \u062a\u0631\u062a\u06cc\u0628 \u0632\u0645\u0627\u0646\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u0646\u062f \u06a9\u0647 \u0645\u0627 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0648 rollback \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645.<\/p>\n\n\n\n<p>$table-&gt;increments(&#8216;id&#8217;)- \u06cc\u06a9 \u0639\u062f\u062f \u0635\u062d\u06cc\u062d \u0627\u0641\u0632\u0627\u06cc\u0634 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0631\u0627 \u0628\u0627 \u0646\u0627\u0645 id \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n\n\n\n<p>$table-&gt;timestamps() &#8211; \u0645\u0647\u0631\u0647\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f\u2014created_at \u0648 updated_at\u060c \u0627\u0645\u0627 \u0646\u06af\u0631\u0627\u0646 \u062a\u0646\u0638\u06cc\u0645 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0646\u0628\u0627\u0634\u06cc\u062f\u060c \u0644\u0627\u0631\u0627\u0648\u0644 \u0645\u0631\u0627\u0642\u0628 \u0627\u0633\u062a \u06a9\u0647 \u0627\u06cc\u0646 \u0641\u06cc\u0644\u062f\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u062f.<\/p>\n\n\n\n<p>Schema::dropIfExists()- \u0627\u0644\u0628\u062a\u0647 \u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f \u062c\u062f\u0648\u0644 \u0631\u0627 \u062d\u0630\u0641 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06af\u0631 \u0631\u0627\u0647 \u062d\u0644 \u0633\u0627\u0632\u06af\u0627\u0631 \u0646\u0628\u0627\u0634\u062f \u0628\u0627\u06cc\u062f \u062e\u0637\u0648\u0637 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0645\u062a\u062f up() \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">up<\/span><span class=\"hljs-params\">()<\/span>\n<\/span>{\n    Schema::create(<span class=\"hljs-string\">'articles'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">(Blueprint $table)<\/span> <\/span>{\n        $table-&gt;increments(<span class=\"hljs-string\">'id'<\/span>);\n        $table-&gt;string(<span class=\"hljs-string\">'title'<\/span>);\n        $table-&gt;text(<span class=\"hljs-string\">'body'<\/span>);\n        $table-&gt;timestamps();\n    });\n}<\/code><\/pre>\n\n\n\n<p>\u0645\u062a\u062f string() \u06cc\u06a9 \u0633\u062a\u0648\u0646 \u0645\u0639\u0627\u062f\u0644 VARCHAR \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 text() \u06cc\u06a9 TEXTequivalent \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. \u062d\u0627\u0644 \u0628\u0627 \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0628\u0627\u06cc\u062f \u062c\u0644\u0648 \u0628\u0631\u0648\u06cc\u0645 \u0648 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<p>\u0644\u0627\u0631\u0627\u0648\u0644 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0639\u0628\u0647 \u0628\u0627 \u062f\u0648 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u0634\u0648\u062f\u060c create_users_table \u0648 create_password_resets_table. \u0645\u0627 \u0627\u0632 \u062c\u062f\u0648\u0644 password_resets \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u0627\u0645\u0627 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 \u062c\u062f\u0648\u0644 create_users_table \u0628\u0631\u0627\u06cc \u0645\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/p>\n\n\n\n<p>\u062d\u0627\u0644\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0645\u062f\u0644 \u062e\u0648\u062f \u0628\u0631\u06af\u0631\u062f\u06cc\u0645 \u0648 \u0622\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0641\u06cc\u0644\u062f fillable \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0622\u0646\u0647\u0627 \u062f\u0631 \u0645\u062f\u0644 \u0647\u0627\u06cc Article::create \u0648 Article::update \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645: \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0642\u0627\u0628\u0644 \u0627\u0646\u062c\u0627\u0645 \u0627\u0633\u062a.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Article<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Model<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">protected<\/span> $fillable = &#91;<span class=\"hljs-string\">'title'<\/span>, <span class=\"hljs-string\">'body'<\/span>];<\/code><\/pre>\n\n\n\n<p>\u0646\u06a9\u062a\u0647: \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u062f\u0627\u062e\u0644 \u0648\u06cc\u0698\u06af\u06cc $fillable \u0631\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062a\u062f\u0647\u0627\u06cc ()create() \u0648 update() Eloquent \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc $guarded \u0628\u0631\u0627\u06cc \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u062f\u0646 \u0628\u0647 \u0647\u0645\u0647 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627 \u0628\u0647 \u062c\u0632 \u0686\u0646\u062f \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0628\u0630\u0631\u06cc\u0627\u0628\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u06cc\u0627 \u067e\u0631\u06a9\u0631\u062f\u0646 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc<\/h3>\n\n\n\n<p>\u0628\u0630\u0631\u06cc\u0627\u0628\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0641\u0631\u0622\u06cc\u0646\u062f \u067e\u0631 \u06a9\u0631\u062f\u0646 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0645\u0627 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0633\u0627\u062e\u062a\u06af\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0627 Faker \u0639\u0631\u0636\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0639\u0627\u0644\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0641\u0631\u0645\u062a \u0635\u062d\u06cc\u062d \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0633\u0627\u062e\u062a\u06af\u06cc \u0628\u0631\u0627\u06cc \u0645\u0627. \u067e\u0633 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u0648\u0644\u06cc\u0646 Seed \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan make:seeder ArticlesTableSeeder\n<\/code><\/pre>\n\n\n\n<p>Seed\u0647\u0627 \u062f\u0631 \u0641\u0647\u0631\u0633\u062a \/database\/seeds \u0642\u0631\u0627\u0631 \u062e\u0648\u0627\u0647\u0646\u062f \u06af\u0631\u0641\u062a. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0627 Seed \u0631\u0627 \u0628\u0631\u0627\u06cc \u0686\u0646\u062f \u0645\u0642\u0627\u0644\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ArticlesTableSeeder<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Seeder<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">run<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-comment\">\/\/ Let's truncate our existing records to start from scratch.<\/span>\n        Article::truncate();\n\n        $faker = \\Faker\\Factory::create();\n\n        <span class=\"hljs-comment\">\/\/ And now, let's create a few articles in our database:<\/span>\n        <span class=\"hljs-keyword\">for<\/span> ($i = <span class=\"hljs-number\">\u06f0<\/span>; $i &lt; <span class=\"hljs-number\">\u06f5\u06f0<\/span>; $i++) {\n            Article::create(&#91;\n                <span class=\"hljs-string\">'title'<\/span> =&gt; $faker-&gt;sentence,\n                <span class=\"hljs-string\">'body'<\/span> =&gt; $faker-&gt;paragraph,\n            ]);\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u067e\u0633 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062f\u0633\u062a\u0648\u0631 seed \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan db:seed --class=ArticlesTableSeeder\n<\/code><\/pre>\n\n\n\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 Seed \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">UsersTableSeeder<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Seeder<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">run<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-comment\">\/\/ Let's clear the users table first<\/span>\n        User::truncate();\n\n        $faker = \\Faker\\Factory::create();\n\n        <span class=\"hljs-comment\">\/\/ Let's make sure everyone has the same password and <\/span>\n        <span class=\"hljs-comment\">\/\/ let's hash it before the loop, or else our seeder <\/span>\n        <span class=\"hljs-comment\">\/\/ will be too slow.<\/span>\n        $password = Hash::make(<span class=\"hljs-string\">'toptal'<\/span>);\n\n        User::create(&#91;\n            <span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'Administrator'<\/span>,\n            <span class=\"hljs-string\">'email'<\/span> =&gt; <span class=\"hljs-string\">'admin@test.com'<\/span>,\n            <span class=\"hljs-string\">'password'<\/span> =&gt; $password,\n        ]);\n        <span class=\"hljs-comment\">\/\/ And now let's generate a few dozen users for our app:<\/span>\n        <span class=\"hljs-keyword\">for<\/span> ($i = <span class=\"hljs-number\">\u06f0<\/span>; $i &lt; <span class=\"hljs-number\">\u06f1\u06f0<\/span>; $i++) {\n            User::create(&#91;\n                <span class=\"hljs-string\">'name'<\/span> =&gt; $faker-&gt;name,\n                <span class=\"hljs-string\">'email'<\/span> =&gt; $faker-&gt;email,\n                <span class=\"hljs-string\">'password'<\/span> =&gt; $password,\n            ]);\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0627\u0641\u0632\u0648\u062f\u0646 seders \u062e\u0648\u062f \u0628\u0647 \u06a9\u0644\u0627\u0633 \u0627\u0635\u0644\u06cc DatabaseSeeder \u062f\u0631 \u062f\u0627\u062e\u0644 \u067e\u0648\u0634\u0647 database\/seeds \u06a9\u0627\u0631 \u0631\u0627 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<p>class DatabaseSeeder extends Seeder<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DatabaseSeeder<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Seeder<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">run<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;call(ArticlesTableSeeder::class);\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;call(UsersTableSeeder::class);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628\u060c \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc php artisan db:seed \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645 \u0648 \u062a\u0645\u0627\u0645 \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0634\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0645\u062a\u062f run \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0633\u06cc\u0631\u0647\u0627 \u0648 \u06a9\u0646\u062a\u0631\u0644\u0631\u0647\u0627 \u06cc\u0627 Routes and Controllers<\/h3>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0642\u0633\u0645\u062a \u0627\u0632 \u0622\u0645\u0648\u0632\u0634 api \u0644\u0627\u0631\u0627\u0648\u0644\u060c \u062d\u0627\u0644 \u0646\u0648\u0628\u062a \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0627\u0635\u0644\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645: \u0627\u06cc\u062c\u0627\u062f\u060c \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0644\u06cc\u0633\u062a\u060c \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06cc\u06a9 \u0645\u0648\u0631\u062f\u060c \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0648 \u062d\u0630\u0641 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u0647\u0627 \u0631\u0627 \u0645\u06cc\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u062f\u0631 \u0641\u0627\u06cc\u0644 routes\/api.php \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Article<\/span>;\n \nRoute::get(<span class=\"hljs-string\">'articles'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ If the Content-Type and Accept headers are set to 'application\/json', <\/span>\n    <span class=\"hljs-comment\">\/\/ this will return a JSON structure. This will be cleaned up later.<\/span>\n    <span class=\"hljs-keyword\">return<\/span> Article::all();\n});\n \nRoute::get(<span class=\"hljs-string\">'articles\/{id}'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span><span class=\"hljs-params\">($id)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">return<\/span> Article::find($id);\n});\n\nRoute::post(<span class=\"hljs-string\">'articles'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span><span class=\"hljs-params\">(Request $request)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">return<\/span> Article::create($request-&gt;all);\n});\n\nRoute::put(<span class=\"hljs-string\">'articles\/{id}'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span><span class=\"hljs-params\">(Request $request, $id)<\/span> <\/span>{\n    $article = Article::findOrFail($id);\n    $article-&gt;update($request-&gt;all());\n\n    <span class=\"hljs-keyword\">return<\/span> $article;\n});\n\nRoute::delete(<span class=\"hljs-string\">'articles\/{id}'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span><span class=\"hljs-params\">($id)<\/span> <\/span>{\n    Article::find($id)-&gt;delete();\n\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">\u06f2\u06f0\u06f4<\/span>;\n})<\/code><\/pre>\n\n\n\n<p>\u0645\u0633\u06cc\u0631\u0647\u0627\u06cc \u062f\u0627\u062e\u0644 api.php \u0628\u0627 \/api\/ \u067e\u06cc\u0634\u0648\u0646\u062f \u0645\u06cc \u0634\u0648\u0646\u062f \u0648 \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631 throttling API \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0631\u0648\u06cc \u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631\u0647\u0627 \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f (\u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u067e\u06cc\u0634\u0648\u0646\u062f \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0644\u0627\u0633 RouteServiceProvider \u0631\u0627 \u062f\u0631 \/app\/Providers\/RouteServiceProvider.php \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f).<\/p>\n\n\n\n<p>\u062d\u0627\u0644\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u06cc\u0646 \u06a9\u062f \u0631\u0627 \u0628\u0647 Controller \u062e\u0648\u062f\u0634 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan make:controller ArticleController<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-left\">ArticleController.php<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Article<\/span>;\n \n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ArticleController<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Controller<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">index<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> Article::all();\n    }\n \n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">show<\/span><span class=\"hljs-params\">($id)<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> Article::find($id);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">store<\/span><span class=\"hljs-params\">(Request $request)<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> Article::create($request-&gt;all());\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">update<\/span><span class=\"hljs-params\">(Request $request, $id)<\/span>\n    <\/span>{\n        $article = Article::findOrFail($id);\n        $article-&gt;update($request-&gt;all());\n\n        <span class=\"hljs-keyword\">return<\/span> $article;\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">delete<\/span><span class=\"hljs-params\">(Request $request, $id)<\/span>\n    <\/span>{\n        $article = Article::findOrFail($id);\n        $article-&gt;delete();\n\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">\u06f2\u06f0\u06f4<\/span>;\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u0641\u0627\u06cc\u0644 routes\/api.php:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Route::get(<span class=\"hljs-string\">'articles'<\/span>, <span class=\"hljs-string\">'ArticleController@index'<\/span>);\nRoute::get(<span class=\"hljs-string\">'articles\/{id}'<\/span>, <span class=\"hljs-string\">'ArticleController@show'<\/span>);\nRoute::post(<span class=\"hljs-string\">'articles'<\/span>, <span class=\"hljs-string\">'ArticleController@store'<\/span>);\nRoute::put(<span class=\"hljs-string\">'articles\/{id}'<\/span>, <span class=\"hljs-string\">'ArticleController@update'<\/span>);\nRoute::delete(<span class=\"hljs-string\">'articles\/{id}'<\/span>, <span class=\"hljs-string\">'ArticleController@delete'<\/span>);<\/code><\/pre>\n\n\n\n<p>\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u062a\u0635\u0627\u0644 \u0645\u062f\u0644 \u0645\u0633\u06cc\u0631 \u0636\u0645\u0646\u06cc\u060c \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0628\u0628\u062e\u0634\u06cc\u0645. \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628\u060c \u0644\u0627\u0631\u0627\u0648\u0644 \u0646\u0645\u0648\u0646\u0647 Article \u0631\u0627 \u062f\u0631 \u0645\u062a\u062f\u0647\u0627\u06cc \u0645\u0627 \u062a\u0632\u0631\u06cc\u0642 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u06af\u0631 \u06f4\u06f0\u06f4 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f\u060c \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0622\u0646 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f. \u0645\u0627 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0641\u0627\u06cc\u0644 \u0645\u0633\u06cc\u0631\u0647\u0627 \u0648 \u06a9\u0646\u062a\u0631\u0644\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Route::get(<span class=\"hljs-string\">'articles'<\/span>, <span class=\"hljs-string\">'ArticleController@index'<\/span>);\nRoute::get(<span class=\"hljs-string\">'articles\/{article}'<\/span>, <span class=\"hljs-string\">'ArticleController@show'<\/span>);\nRoute::post(<span class=\"hljs-string\">'articles'<\/span>, <span class=\"hljs-string\">'ArticleController@store'<\/span>);\nRoute::put(<span class=\"hljs-string\">'articles\/{article}'<\/span>, <span class=\"hljs-string\">'ArticleController@update'<\/span>);\nRoute::delete(<span class=\"hljs-string\">'articles\/{article}'<\/span>, <span class=\"hljs-string\">'ArticleController@delete'<\/span>);\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ArticleController<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Controller<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">index<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> Article::all();\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">show<\/span><span class=\"hljs-params\">(Article $article)<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> $article;\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">store<\/span><span class=\"hljs-params\">(Request $request)<\/span>\n    <\/span>{\n        $article = Article::create($request-&gt;all());\n\n        <span class=\"hljs-keyword\">return<\/span> response()-&gt;json($article, <span class=\"hljs-number\">\u06f2\u06f0\u06f1<\/span>);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">update<\/span><span class=\"hljs-params\">(Request $request, Article $article)<\/span>\n    <\/span>{\n        $article-&gt;update($request-&gt;all());\n\n        <span class=\"hljs-keyword\">return<\/span> response()-&gt;json($article, <span class=\"hljs-number\">\u06f2\u06f0\u06f0<\/span>);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">delete<\/span><span class=\"hljs-params\">(Article $article)<\/span>\n    <\/span>{\n        $article-&gt;delete();\n\n        <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(<span class=\"hljs-keyword\">null<\/span>, <span class=\"hljs-number\">\u06f2\u06f0\u06f4<\/span>);\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0646\u06a9\u062a\u0647 \u0627\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u06a9\u062f\u0647\u0627\u06cc \u0648\u0636\u0639\u06cc\u062a HTTP \u0648 \u0641\u0631\u0645\u062a \u067e\u0627\u0633\u062e<\/h3>\n\n\n\n<p>\u0645\u0627 \u067e\u0627\u0633\u062e:<\/p>\n\n\n\n<p>response()-&gt;json()<\/p>\n\n\n\n<p>\u0631\u0627 \u0628\u0647 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645. \u0627\u06cc\u0646 \u0628\u0647 \u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0635\u0631\u06cc\u062d\u0627\u064b \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc JSON \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u0645 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u06a9\u062f HTTP \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062a\u0648\u0633\u0637 \u0645\u0634\u062a\u0631\u06cc \u0642\u0627\u0628\u0644 \u062a\u062c\u0632\u06cc\u0647 \u0627\u0633\u062a. \u0631\u0627\u06cc\u062c \u062a\u0631\u06cc\u0646 \u06a9\u062f\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u06f2\u06f0\u06f0: \u06a9\u062f \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0648 \u06af\u0632\u06cc\u0646\u0647 \u067e\u06cc\u0634 \u0641\u0631\u0636.<\/li>\n\n\n\n<li>\u06f2\u06f0\u06f1: \u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u0634\u062f.<\/li>\n\n\n\n<li>\u06f2\u06f0\u06f4: \u0628\u062f\u0648\u0646 \u0645\u062d\u062a\u0648\u0627. \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u06cc\u06a9 \u0639\u0645\u0644 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u062c\u0631\u0627 \u0634\u062f\u060c \u0627\u0645\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06af\u0634\u062a \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li>\u06f2\u06f0\u06f6: \u0645\u0637\u0627\u0644\u0628 \u062c\u0632\u0626\u06cc. \u0632\u0645\u0627\u0646\u06cc \u0645\u0641\u06cc\u062f \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0641\u0647\u0631\u0633\u062a \u0635\u0641\u062d\u0647 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0645\u0646\u0627\u0628\u0639 \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f.<\/li>\n\n\n\n<li>\u06f4\u06f0\u06f0: \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u062f. \u06af\u0632\u06cc\u0646\u0647 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0648\u0641\u0642 \u0628\u0647 \u062a\u0627\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0646\u0645\u06cc \u0634\u0648\u0646\u062f.<\/li>\n\n\n\n<li>\u06f4\u06f0\u06f1: \u063a\u06cc\u0631 \u0645\u062c\u0627\u0632. \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u0648\u062f.<\/li>\n\n\n\n<li>\u06f4\u06f0\u06f3: \u0645\u0645\u0646\u0648\u0639. \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0645\u062c\u0648\u0632 \u0627\u0646\u062c\u0627\u0645 \u06cc\u06a9 \u0639\u0645\u0644 \u0631\u0627 \u0646\u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li>\u06f4\u06f0\u06f4 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u0646\u0628\u0639 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f\u060c \u0627\u06cc\u0646 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0648\u0633\u0637 \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n\n\n\n<li>\u06f5\u06f0\u06f0: \u062e\u0637\u0627\u06cc \u0633\u0631\u0648\u0631 \u062f\u0627\u062e\u0644\u06cc.<\/li>\n\n\n\n<li>\u06f5\u06f0\u06f3 : \u062e\u062f\u0645\u0627\u062a \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u06cc\u0633\u062a.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u0631\u0633\u0627\u0644 \u06cc\u06a9 \u067e\u0627\u0633\u062e \u0635\u062d\u06cc\u062d \u06f4\u06f0\u06f4 \u0633\u0631 \u0644\u0627\u0648\u0631\u0627\u0644<\/h3>\n\n\n\n<p>\u0627\u06af\u0631 \u0633\u0639\u06cc \u06a9\u0631\u062f\u06cc\u062f \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0646\u0627\u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0648\u0627\u06a9\u0634\u06cc \u06a9\u0646\u06cc\u062f\u060c \u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f \u0648 \u06a9\u0644 stacktrace \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403355600-0318da87ebbe81039ca45baac47bd5d9.webp\"><img decoding=\"async\" width=\"1720\" height=\"811\" data-src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403355600-0318da87ebbe81039ca45baac47bd5d9.webp\" alt=\"\u0622\u0645\u0648\u0632\u0634 restful api\" class=\"wp-image-29603 lazyload\" title=\"\" data-srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403355600-0318da87ebbe81039ca45baac47bd5d9.webp 1720w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403355600-0318da87ebbe81039ca45baac47bd5d9-300x141.webp 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403355600-0318da87ebbe81039ca45baac47bd5d9-1024x483.webp 1024w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403355600-0318da87ebbe81039ca45baac47bd5d9-768x362.webp 768w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403355600-0318da87ebbe81039ca45baac47bd5d9-1536x724.webp 1536w\" data-sizes=\"(max-width: 1720px) 100vw, 1720px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1720px; --smush-placeholder-aspect-ratio: 1720\/811;\" \/><\/a><figcaption><\/figcaption><\/figure>\n\n\n\n<p>\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0644\u0627\u0633 \u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc \u062e\u0648\u062f\u060c \u0648\u0627\u0642\u0639 \u062f\u0631 app\/Exceptions\/Handler.php\u060c \u0622\u0646 \u0631\u0627 \u0628\u0631\u0637\u0631\u0641 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u067e\u0627\u0633\u062e JSON \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">render<\/span><span class=\"hljs-params\">($request, Exception $exception)<\/span>\n<\/span>{\n    <span class=\"hljs-comment\">\/\/ This will replace our 404 response with<\/span>\n    <span class=\"hljs-comment\">\/\/ a JSON response.<\/span>\n    <span class=\"hljs-keyword\">if<\/span> ($exception <span class=\"hljs-keyword\">instanceof<\/span> ModelNotFoundException) {\n        <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(&#91;\n            <span class=\"hljs-string\">'error'<\/span> =&gt; <span class=\"hljs-string\">'Resource not found'<\/span>\n        ], <span class=\"hljs-number\">\u06f4\u06f0\u06f4<\/span>);\n    }\n\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">parent<\/span>::render($request, $exception);\n}<\/code><\/pre>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u0628\u0627\u0632\u06af\u0634\u062a \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    data: <span class=\"hljs-string\">\"Resource not found\"<\/span>\n}<\/code><\/pre>\n\n\n\n<p>\u0627\u06af\u0631 \u0627\u0632 \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 \u062f\u0627\u062f\u0646 \u0628\u0647 \u0635\u0641\u062d\u0627\u062a \u062f\u06cc\u06af\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u06a9\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631 \u0628\u0627 \u0633\u0631\u0628\u0631\u06af Accept \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f\u060c \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u062e\u0637\u0627\u0647\u0627\u06cc \u06f4\u06f0\u06f4 \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u06cc\u06a9 JSON \u0631\u0627 \u0646\u06cc\u0632 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">render<\/span><span class=\"hljs-params\">($request, Exception $exception)<\/span>\n<\/span>{\n    <span class=\"hljs-comment\">\/\/ This will replace our 404 response with<\/span>\n    <span class=\"hljs-comment\">\/\/ a JSON response.<\/span>\n    <span class=\"hljs-keyword\">if<\/span> ($exception <span class=\"hljs-keyword\">instanceof<\/span> ModelNotFoundException &amp;&amp;\n        $request-&gt;wantsJson())\n    {\n        <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(&#91;\n            <span class=\"hljs-string\">'data'<\/span> =&gt; <span class=\"hljs-string\">'Resource not found'<\/span>\n        ], <span class=\"hljs-number\">\u06f4\u06f0\u06f4<\/span>);\n    }\n\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">parent<\/span>::render($request, $exception);\n}<\/code><\/pre>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc API \u0628\u0647 \u0647\u062f\u0631 Accept: application\/json \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0646\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a<\/h3>\n\n\n\n<p>\u0631\u0627\u0647\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc API Authentication \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f (\u06cc\u06a9\u06cc \u0627\u0632 \u0622\u0646\u0647\u0627 Passport \u0627\u0633\u062a\u060c \u0631\u0648\u0634\u06cc \u0639\u0627\u0644\u06cc \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc OAuth2)\u060c \u0627\u0645\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644\u060c \u0645\u0627 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0631\u0627 \u062f\u0631 \u067e\u06cc\u0634 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06af\u0631\u0641\u062a.<\/p>\n\n\n\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0641\u06cc\u0644\u062f api_token \u0631\u0627 \u0628\u0647 \u062c\u062f\u0648\u0644 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan make:migration --table=users adds_api_token_to_users_table\n<\/code><\/pre>\n\n\n\n<p>\u0648 \u0633\u067e\u0633 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">up<\/span><span class=\"hljs-params\">()<\/span>\n<\/span>{\n    Schema::table(<span class=\"hljs-string\">'users'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">(Blueprint $table)<\/span> <\/span>{\n        $table-&gt;string(<span class=\"hljs-string\">'api_token'<\/span>, <span class=\"hljs-number\">\u06f6\u06f0<\/span>)-&gt;unique()-&gt;nullable();\n    });\n}\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">down<\/span><span class=\"hljs-params\">()<\/span>\n<\/span>{\n    Schema::table(<span class=\"hljs-string\">'users'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">(Blueprint $table)<\/span> <\/span>{\n        $table-&gt;dropColumn(&#91;<span class=\"hljs-string\">'api_token'<\/span>]);\n    });\n}<\/code><\/pre>\n\n\n\n<p>\u067e\u0633 \u0627\u0632 \u0622\u0646\u060c \u0641\u0642\u0637 \u0645\u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0631\u0627 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0627\u062c\u0631\u0627 \u0645\u06cc\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan migrate\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u06cc\u062c\u0627\u062f \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062b\u0628\u062a \u0646\u0627\u0645<\/h3>\n\n\n\n<p>\u0645\u0627 \u0627\u0632 RegisterController (\u062f\u0631 \u067e\u0648\u0634\u0647 Auth) \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u067e\u0627\u0633\u062e \u0635\u062d\u06cc\u062d \u0647\u0646\u06af\u0627\u0645 \u062b\u0628\u062a \u0646\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0627 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0639\u0628\u0647 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u0634\u0648\u062f\u060c \u0627\u0645\u0627 \u0645\u0627 \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u06a9\u0645\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u0645 \u062a\u0627 \u067e\u0627\u0633\u062e \u0645\u0648\u0631\u062f \u0646\u0638\u0631\u0645\u0627\u0646 \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u0645.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"1720\" height=\"1407\" data-src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403379627-4f60b5cddbc0055ef3685edc51bfef45.webp\" alt=\"\u0627\u06cc\u062c\u0627\u062f \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062b\u0628\u062a \u0646\u0627\u0645 \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644\" class=\"wp-image-29604 lazyload\" title=\"\" data-srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403379627-4f60b5cddbc0055ef3685edc51bfef45.webp 1720w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403379627-4f60b5cddbc0055ef3685edc51bfef45-300x245.webp 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403379627-4f60b5cddbc0055ef3685edc51bfef45-1024x838.webp 1024w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403379627-4f60b5cddbc0055ef3685edc51bfef45-768x628.webp 768w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403379627-4f60b5cddbc0055ef3685edc51bfef45-1536x1256.webp 1536w\" data-sizes=\"(max-width: 1720px) 100vw, 1720px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1720px; --smush-placeholder-aspect-ratio: 1720\/1407;\" \/><figcaption><\/figcaption><\/figure>\n\n\n\n<p>\u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc RegistersUsers \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u062b\u0628\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u06a9\u0627\u0631 \u0622\u0646 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">register<\/span><span class=\"hljs-params\">(Request $request)<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">$this<\/span>-&gt;validator($request-&gt;all())-&gt;validate();\n    event(<span class=\"hljs-keyword\">new<\/span> Registered($user = <span class=\"hljs-keyword\">$this<\/span>-&gt;create($request-&gt;all())));\n    <span class=\"hljs-keyword\">$this<\/span>-&gt;guard()-&gt;login($user);\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">$this<\/span>-&gt;registered($request, $user)\n                    ?: redirect(<span class=\"hljs-keyword\">$this<\/span>-&gt;redirectPath());\n}<\/code><\/pre>\n\n\n\n<p>\u0645\u0627 \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0645\u062a\u062f ()registered \u0631\u0627 \u062f\u0631 RegisterController \u062e\u0648\u062f \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645. \u0645\u062a\u062f&nbsp; request $ \u0648 user $ \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06cc\u0646 \u0648\u0627\u0642\u0639\u0627\u064b \u062a\u0645\u0627\u0645 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0648\u0634 \u0628\u0627\u06cc\u062f \u062f\u0631 \u062f\u0627\u062e\u0644 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">registered<\/span><span class=\"hljs-params\">(Request $request, $user)<\/span>\n<\/span>{\n    $user-&gt;generateToken();\n\n    <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(&#91;<span class=\"hljs-string\">'data'<\/span> =&gt; $user-&gt;toArray()], <span class=\"hljs-number\">\u06f2\u06f0\u06f1<\/span>);\n}<\/code><\/pre>\n\n\n\n<p>\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 \u0645\u0633\u06cc\u0631\u0647\u0627 \u067e\u06cc\u0648\u0646\u062f \u062f\u0647\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Route::post(<span class=\"hljs-string\">'register'<\/span>, <span class=\"hljs-string\">'Auth\\RegisterController@register'<\/span>);\n<\/code><\/pre>\n\n\n\n<p>\u062f\u0631 \u0628\u062e\u0634 \u0628\u0627\u0644\u0627\u060c \u0627\u0632 \u0631\u0648\u0634\u06cc \u062f\u0631 \u0645\u062f\u0644 User \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u062a\u0648\u06a9\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u06cc\u0645. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0632\u0645\u0627\u0646\u06cc \u0645\u0641\u06cc\u062f \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0641\u0642\u0637 \u06cc\u06a9 \u0631\u0627\u0647 \u0648\u0627\u062d\u062f \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u062a\u0648\u06a9\u0646 \u0647\u0627 \u062f\u0627\u0631\u06cc\u0645. \u0631\u0648\u0634 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0645\u062f\u0644 \u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">User<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Authenticatable<\/span>\n<\/span>{\n    ...\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">generateToken<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;api_token = str_random(<span class=\"hljs-number\">\u06f6\u06f0<\/span>);\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;save();\n\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">$this<\/span>-&gt;api_token;\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u06a9\u0627\u0631\u0628\u0631 \u0627\u06a9\u0646\u0648\u0646 \u062b\u0628\u062a \u0646\u0627\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u0628\u0647 \u0644\u0637\u0641 \u0627\u0639\u062a\u0628\u0627\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0648 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0639\u0628\u0647\u060c \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u0646\u0627\u0645\u060c \u0627\u06cc\u0645\u06cc\u0644\u060c \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0648 \u062a\u0627\u06cc\u06cc\u062f_\u06af\u0630\u0631\u0648\u0627\u0698\u0647 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a \u0648 \u0628\u0627\u0632\u062e\u0648\u0631\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f. \u0645\u062a\u062f ()validator \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 RegisterController \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0642\u0648\u0627\u0646\u06cc\u0646 \u0686\u06af\u0648\u0646\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0645\u06cc\u200c\u0634\u0648\u0646\u062f.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ curl -X POST http:\/\/localhost:8000\/api\/register \\\n -H \"Accept: application\/json\" \\\n -H \"Content-Type: application\/json\" \\\n -d '{\"name\": \"John\", \"email\": \"john.doe@toptal.com\", \"password\": \"toptal123\", \"password_confirmation\": \"toptal123\"}'\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    \"data\": {\n        \"api_token\":\"0syHnl0Y9jOIfszq11EC2CBQwCfObmvscrZYo5o2ilZPnohvndH797nDNyAT\",\n        \"created_at\": \"2017-06-20 21:17:15\",\n        \"email\": \"john.doe@toptal.com\",\n        \"id\": 51,\n        \"name\": \"John\",\n        \"updated_at\": \"2017-06-20 21:17:15\"\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u06cc\u062c\u0627\u062f \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0648\u0631\u0648\u062f \u06cc\u0627 Login Endpoint<\/h3>\n\n\n\n<p>\u062f\u0631\u0633\u062a \u0645\u0627\u0646\u0646\u062f \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062b\u0628\u062a \u0646\u0627\u0645\u060c \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 LoginController (\u062f\u0631 \u067e\u0648\u0634\u0647 Auth) \u0631\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0627\u0632 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a API \u062e\u0648\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0646\u06cc\u0645. \u0645\u062a\u062f login \u0648\u06cc\u0698\u06af\u06cc AuthenticatesUsers \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0631\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 API \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">login<\/span><span class=\"hljs-params\">(Request $request)<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">$this<\/span>-&gt;validateLogin($request);\n\n    <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">$this<\/span>-&gt;attemptLogin($request)) {\n        $user = <span class=\"hljs-keyword\">$this<\/span>-&gt;guard()-&gt;user();\n        $user-&gt;generateToken();\n\n        <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(&#91;\n            <span class=\"hljs-string\">'data'<\/span> =&gt; $user-&gt;toArray(),\n        ]);\n    }\n\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">$this<\/span>-&gt;sendFailedLoginResponse($request);\n}<\/code><\/pre>\n\n\n\n<p>\u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 \u0645\u0633\u06cc\u0631\u0647\u0627 \u067e\u06cc\u0648\u0646\u062f \u062f\u0647\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Route::post(<span class=\"hljs-string\">'login'<\/span>, <span class=\"hljs-string\">'Auth\\LoginController@login'<\/span>);\n<\/code><\/pre>\n\n\n\n<p>\u062d\u0627\u0644\u060c \u0628\u0627 \u0641\u0631\u0636 \u0627\u06cc\u0646\u06a9\u0647 seeder \u0647\u0627 \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u0627\u0646\u062f\u060c \u0648\u0642\u062a\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a POST \u0631\u0627 \u0628\u0647 \u0622\u0646 \u0645\u0633\u06cc\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0627\u06cc\u0646 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u062f\u0633\u062a \u0645\u06cc \u0622\u0648\u0631\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ curl -X POST localhost:8000\/api\/login \\\n  -H \"Accept: application\/json\" \\\n  -H \"Content-type: application\/json\" \\\n  -d \"{\\\"email\\\": \\\"admin@test.com\\\", \\\"password\\\": \\\"toptal\\\" }\"\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    <span class=\"hljs-attr\">\"data\"<\/span>: {\n        <span class=\"hljs-attr\">\"id\"<\/span>:<span class=\"hljs-number\">\u06f1<\/span>,\n        <span class=\"hljs-attr\">\"name\"<\/span>:<span class=\"hljs-string\">\"Administrator\"<\/span>,\n        <span class=\"hljs-attr\">\"email\"<\/span>:<span class=\"hljs-string\">\"admin@test.com\"<\/span>,\n        <span class=\"hljs-attr\">\"created_at\"<\/span>:<span class=\"hljs-string\">\"\u06f2\u06f0\u06f1\u06f7-\u06f0\u06f4-\u06f2\u06f5 \u06f0\u06f1:\u06f0\u06f5:\u06f3\u06f4\"<\/span>,\n        <span class=\"hljs-attr\">\"updated_at\"<\/span>:<span class=\"hljs-string\">\"\u06f2\u06f0\u06f1\u06f7-\u06f0\u06f4-\u06f2\u06f5 \u06f0\u06f2:\u06f5\u06f0:\u06f4\u06f0\"<\/span>,\n        <span class=\"hljs-attr\">\"api_token\"<\/span>:<span class=\"hljs-string\">\"Jll7q0BSijLOrzaOSm5Dr5hW9cJRZAJKOzvDlxjKCXepwAeZ7JR6YP5zQqnw\"<\/span>\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u062a\u0648\u06a9\u0646 \u062f\u0631 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0627 \u0627\u0631\u0633\u0627\u0644 \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc api_token \u062f\u0631 payload \u06cc\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u062d\u0627\u0645\u0644 \u062f\u0631 \u0647\u062f\u0631\u0647\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Authorization: Bearer Jll7q0BSijLOrzaOSm5Dr5hW9cJRZAJKOzvDlxjKCXepwAeZ7JR6YP5zQqnw<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u062e\u0631\u0648\u062c \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u06cc\u0627 Logging Out<\/h3>\n\n\n\n<p>\u0628\u0627 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0641\u0639\u0644\u06cc \u0645\u0627\u060c \u0627\u06af\u0631 \u062a\u0648\u06a9\u0646 \u0627\u0634\u062a\u0628\u0627\u0647 \u06cc\u0627 \u06af\u0645 \u0634\u062f\u0647 \u0628\u0627\u0634\u062f\u060c \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u067e\u0627\u0633\u062e \u062a\u0627\u06cc\u06cc\u062f \u0646\u0634\u062f\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u062f. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062e\u0631\u0648\u062c \u0633\u0627\u062f\u0647\u060c \u062a\u0648\u06a9\u0646 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062d\u0630\u0641 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n\n\n\n<p class=\"has-text-align-left\"><code>routes\/api.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Route::post(<span class=\"hljs-string\">'logout'<\/span>, <span class=\"hljs-string\">'Auth\\LoginController@logout'<\/span>);\n<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-left\"><code>Auth\\LoginController.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">logout<\/span><span class=\"hljs-params\">(Request $request)<\/span>\n<\/span>{\n    $user = Auth::guard(<span class=\"hljs-string\">'api'<\/span>)-&gt;user();\n\n    <span class=\"hljs-keyword\">if<\/span> ($user) {\n        $user-&gt;api_token = <span class=\"hljs-keyword\">null<\/span>;\n        $user-&gt;save();\n    }\n\n    <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(&#91;<span class=\"hljs-string\">'data'<\/span> =&gt; <span class=\"hljs-string\">'User logged out.'<\/span>], <span class=\"hljs-number\">\u06f2\u06f0\u06f0<\/span>);\n}<\/code><\/pre>\n\n\n\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc\u060c \u0647\u0631 \u062a\u0648\u06a9\u0646\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f \u0648 API \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0627 \u0631\u062f \u0645\u06cc \u06a9\u0646\u062f (\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631\u0647\u0627\u060c \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0628\u062e\u0634 \u0628\u0639\u062f\u06cc \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f). \u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0628\u0627 front-end \u0647\u0645\u0627\u0647\u0646\u06af \u0634\u0648\u062f \u062a\u0627 \u0627\u0632 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631 \u0628\u062f\u0648\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0647\u06cc\u0686 \u0645\u062d\u062a\u0648\u0627\u06cc\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0634\u0648\u062f.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Middlewares \u0628\u0631\u0627\u06cc \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc<\/h4>\n\n\n\n<p>\u0628\u0627 \u0627\u06cc\u062c\u0627\u062f api_token\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0645\u06cc\u0627\u0646\u200c\u0627\u0641\u0632\u0627\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 routes \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Route::middleware(<span class=\"hljs-string\">'auth:api'<\/span>)\n    -&gt;get(<span class=\"hljs-string\">'\/user'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">(Request $request)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> $request-&gt;user();\n    });<\/code><\/pre>\n\n\n\n<p>\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062a\u062f: <strong>$<\/strong><strong>request-&gt;user<\/strong><strong>() <\/strong>\u06cc\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0646\u0645\u0627\u06cc Auth \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0639\u0644\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Auth::guard(<span class=\"hljs-string\">'api'<\/span>)-&gt;user(); <span class=\"hljs-comment\">\/\/ instance of the logged user<\/span>\nAuth::guard(<span class=\"hljs-string\">'api'<\/span>)-&gt;check(); <span class=\"hljs-comment\">\/\/ if a user is authenticated<\/span>\nAuth::guard(<span class=\"hljs-string\">'api'<\/span>)-&gt;id(); <span class=\"hljs-comment\">\/\/ the id of the authenticated user<\/span><\/code><\/pre>\n\n\n\n<p>\u0648 \u0628\u0647 \u0646\u062a\u06cc\u062c\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646 \u0645\u06cc \u0631\u0633\u06cc\u0645:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403407815-652a3ea58a1360bfa42ba999a4beab33.webp\"><img decoding=\"async\" width=\"1720\" height=\"949\" data-src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403407815-652a3ea58a1360bfa42ba999a4beab33.webp\" alt=\"\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Middlewares \u0628\u0631\u0627\u06cc \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644\" class=\"wp-image-29605 lazyload\" title=\"\" data-srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403407815-652a3ea58a1360bfa42ba999a4beab33.webp 1720w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403407815-652a3ea58a1360bfa42ba999a4beab33-300x166.webp 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403407815-652a3ea58a1360bfa42ba999a4beab33-1024x565.webp 1024w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403407815-652a3ea58a1360bfa42ba999a4beab33-768x424.webp 768w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2022\/04\/toptal-blog-image-1554403407815-652a3ea58a1360bfa42ba999a4beab33-1536x847.webp 1536w\" data-sizes=\"(max-width: 1720px) 100vw, 1720px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1720px; --smush-placeholder-aspect-ratio: 1720\/949;\" \/><\/a><figcaption><\/figcaption><\/figure>\n\n\n\n<p>\u0627\u06cc\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0628\u0627\u06cc\u062f \u0631\u0648\u0634 \u062a\u0627\u06cc\u06cc\u062f \u0646\u0634\u062f\u0647 \u0641\u0639\u0644\u06cc \u0631\u0627 \u062f\u0631 \u06a9\u0644\u0627\u0633 Handler \u062e\u0648\u062f \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645. \u0646\u0633\u062e\u0647 \u0641\u0639\u0644\u06cc \u0641\u0642\u0637 \u062f\u0631 \u0635\u0648\u0631\u062a\u06cc JSON \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f \u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0627\u0631\u0627\u06cc \u0647\u062f\u0631 Accept: application\/json \u0628\u0627\u0634\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0622\u0646 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">unauthenticated<\/span><span class=\"hljs-params\">($request, AuthenticationException $exception)<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(&#91;<span class=\"hljs-string\">'error'<\/span> =&gt; <span class=\"hljs-string\">'Unauthenticated'<\/span>], <span class=\"hljs-number\">\u06f4\u06f0\u06f1<\/span>);\n}<\/code><\/pre>\n\n\n\n<p>\u0628\u0627 \u0631\u0641\u0639 \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u0642\u0627\u0644\u0647 \u0628\u0631\u06af\u0631\u062f\u06cc\u0645 \u062a\u0627 \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0645\u06cc\u0627\u0646\u200c\u0627\u0641\u0632\u0627\u0631 auth:api \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u0645. \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06af\u0631\u0648\u0647 \u0647\u0627\u06cc \u0645\u0633\u06cc\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">unauthenticated<\/span><span class=\"hljs-params\">($request, AuthenticationException $exception)<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(&#91;<span class=\"hljs-string\">'error'<\/span> =&gt; <span class=\"hljs-string\">'Unauthenticated'<\/span>], <span class=\"hljs-number\">\u06f4\u06f0\u06f1<\/span>);\n}<\/code><\/pre>\n\n\n\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u0645\u0627 \u0645\u062c\u0628\u0648\u0631 \u0646\u06cc\u0633\u062a\u06cc\u0645 \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0645\u0633\u06cc\u0631\u0647\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0633\u062a \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644<\/h2>\n\n\n\n<p>\u0644\u0627\u0631\u0627\u0648\u0644 \u0634\u0627\u0645\u0644 \u0627\u062f\u063a\u0627\u0645 \u0628\u0627 PHPUnit \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0639\u0628\u0647 \u0628\u0627 phpunit.xml \u0627\u0633\u062a \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0686\u0646\u062f\u06cc\u0646 \u06a9\u0645\u06a9 \u06a9\u0646\u0646\u062f\u0647 \u0648 \u0627\u0628\u0632\u0627\u0631 \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0645\u0627 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u06a9\u0627\u0631 \u0645\u0627 \u0631\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0628\u0647 \u062e\u0635\u0648\u0635 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 API \u0647\u0627.<\/p>\n\n\n\n<p>\u062a\u0639\u062f\u0627\u062f\u06cc \u0627\u0628\u0632\u0627\u0631 \u062e\u0627\u0631\u062c\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 API \u062e\u0648\u062f \u0627\u0632 \u0622\u0646\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0622\u0632\u0645\u0627\u06cc\u0634 \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0647\u062a\u0631\u06cc \u0627\u0633\u062a \u0648 \u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u062a\u0645\u0627\u0645 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0633\u0627\u062e\u062a\u0627\u0631 \u0648 \u0646\u062a\u0627\u06cc\u062c API \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645 \u0648 \u062f\u0631 \u0639\u06cc\u0646 \u062d\u0627\u0644 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0627\u0645\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u062d\u0641\u0638 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u0686\u0646\u062f \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 SQLite \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u0645. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u062a\u0633\u062a\u200c\u0647\u0627\u06cc \u0645\u0627 \u0628\u0647 \u0633\u0631\u0639\u062a \u0627\u062c\u0631\u0627 \u0634\u0648\u0646\u062f\u060c \u0627\u0645\u0627 \u0646\u062a\u06cc\u062c\u0647 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u062e\u06cc \u0627\u0632 \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 (\u0645\u062b\u0644\u0627\u064b \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627) \u062f\u0631 \u0622\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062e\u0627\u0635 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u06a9\u0627\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0646\u062f.<\/p>\n\n\n\n<p>\u0645\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u0622\u0632\u0645\u0648\u0646 \u0646\u06cc\u0632 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0647\u0627 \u0631\u0627 \u0627\u062c\u0631\u0627 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0647 \u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u0633\u062a \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645 \u0648 \u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0628\u0631\u06cc\u0645 \u0648 \u0627\u0632 \u0647\u0631 \u0646\u0648\u0639 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u06cc\u0646 \u062a\u0633\u062a \u0647\u0627 \u0627\u062c\u062a\u0646\u0627\u0628 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p>\u062f\u0631 \u0641\u0627\u06cc\u0644 config\/database.php \u0645\u0627 \u0628\u0627\u06cc\u062f \u0641\u06cc\u0644\u062f \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u062f\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc sqlite \u0628\u0647 \u0635\u0648\u0631\u062a :memory \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>...\n<span class=\"hljs-string\">'connections'<\/span> =&gt; &#91;\n\n    <span class=\"hljs-string\">'sqlite'<\/span> =&gt; &#91;\n        <span class=\"hljs-string\">'driver'<\/span> =&gt; <span class=\"hljs-string\">'sqlite'<\/span>,\n        <span class=\"hljs-string\">'database'<\/span> =&gt; <span class=\"hljs-string\">':memory:'<\/span>,\n        <span class=\"hljs-string\">'prefix'<\/span> =&gt; <span class=\"hljs-string\">''<\/span>,\n    ],\n    \n    ...\n]<\/code><\/pre>\n\n\n\n<p>\u0633\u067e\u0633 SQLite \u0631\u0627 \u062f\u0631 phpunit.xml \u0628\u0627 \u0627\u0641\u0632\u0648\u062f\u0646 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc DB_CONNECTION \u0641\u0639\u0627\u0644 \u0645\u06cc\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">php<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">env<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"APP_ENV\"<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">\"testing\"<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">env<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"CACHE_DRIVER\"<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">\"array\"<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">env<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"SESSION_DRIVER\"<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">\"array\"<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">env<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"QUEUE_DRIVER\"<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">\"sync\"<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">env<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"DB_CONNECTION\"<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">\"sqlite\"<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">php<\/span>&gt;<\/span>\n<\/code><\/pre>\n\n\n\n<p>\u0628\u0627 \u062d\u0630\u0641 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639\u060c \u062a\u0646\u0647\u0627 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0627\u0646\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u06a9\u0644\u0627\u0633 TestCase \u067e\u0627\u06cc\u0647 \u062e\u0648\u062f \u0631\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0627\u0632 \u0645\u06cc\u06af\u0631\u06cc\u0634\u0646\u200c\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u062a\u0633\u062a \u0628\u06a9\u0627\u0631 \u0628\u0628\u0631\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u060c \u0628\u0627\u06cc\u062f \u0648\u06cc\u0698\u06af\u06cc DatabaseMigrations \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645 \u0648 \u0633\u067e\u0633 \u06cc\u06a9 \u0641\u0631\u0627\u062e\u0648\u0627\u0646 Artisan \u0631\u0627 \u0628\u0647 \u0645\u062a\u062f setUp() \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645. \u06a9\u0644\u0627\u0633 \u0628\u0639\u062f \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Foundation<\/span>\\<span class=\"hljs-title\">Testing<\/span>\\<span class=\"hljs-title\">DatabaseMigrations<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Foundation<\/span>\\<span class=\"hljs-title\">Testing<\/span>\\<span class=\"hljs-title\">TestCase<\/span> <span class=\"hljs-title\">as<\/span> <span class=\"hljs-title\">BaseTestCase<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Support<\/span>\\<span class=\"hljs-title\">Facades<\/span>\\<span class=\"hljs-title\">Artisan<\/span>;\n\n<span class=\"hljs-keyword\">abstract<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TestCase<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">BaseTestCase<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">CreatesApplication<\/span>, <span class=\"hljs-title\">DatabaseMigrations<\/span>;\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">setUp<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">parent<\/span>::setUp();\n        Artisan::call(<span class=\"hljs-string\">'db:seed'<\/span>);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u0622\u062e\u0631\u06cc\u0646 \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0633\u062a\u0648\u0631 test \u0631\u0627 \u0628\u0647 composer.json \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-string\">\"scripts\"<\/span>: {\n        <span class=\"hljs-attr\">\"test\"<\/span> : &#91;\n            <span class=\"hljs-string\">\"vendor\/bin\/phpunit\"<\/span>\n        ],\n    ... \n    },   <\/code><\/pre>\n\n\n\n<p>\u062f\u0633\u062a\u0648\u0631 \u062a\u0633\u062a \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ composer test\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc Factories &nbsp;\u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0647\u0627\u06cc \u0645\u0627<\/h3>\n\n\n\n<p>Factories \u0628\u0647 \u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0633\u0631\u0639\u062a \u0627\u0634\u06cc\u0627\u06cc\u06cc \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645. \u0622\u0646\u0647\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 database\/factories &nbsp;\u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0646\u062f. \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0627 \u06cc\u06a9 Factories \u0628\u0631\u0627\u06cc \u06a9\u0644\u0627\u0633 User \u0627\u0632 \u062c\u0639\u0628\u0647 \u062e\u0627\u0631\u062c \u0645\u06cc \u0634\u0648\u062f. &nbsp;\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0644\u0627\u0633 Article \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$factory-&gt;define(App\\Article::class, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">(Faker\\Generator $faker)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">return<\/span> &#91;\n        <span class=\"hljs-string\">'title'<\/span> =&gt; $faker-&gt;sentence,\n        <span class=\"hljs-string\">'body'<\/span> =&gt; $faker-&gt;paragraph,\n    ];\n});<\/code><\/pre>\n\n\n\n<p>\u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 Faker \u0642\u0628\u0644\u0627\u064b \u062a\u0632\u0631\u06cc\u0642 \u0634\u062f\u0647 \u0627\u0633\u062a \u062a\u0627 \u0628\u0647 \u0645\u0627 \u06a9\u0645\u06a9 \u06a9\u0646\u062f \u0642\u0627\u0644\u0628 \u0635\u062d\u06cc\u062d \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062a\u0635\u0627\u062f\u0641\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u0644 \u0647\u0627\u06cc \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0627\u0648\u0644\u06cc\u0646 \u062a\u0633\u062a \u0647\u0627\u06cc \u0645\u0627<\/h4>\n\n\n\n<p>\u0645\u0627 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646 \u062a\u0633\u062a \u0648\u0631\u0648\u062f \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u0627\u062f\u0639\u0627\u06cc\u06cc \u0644\u0627\u0631\u0627\u0648\u0644 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0648 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u067e\u0627\u0633\u062e \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u0648\u0644\u06cc\u0646 \u0622\u0632\u0645\u0627\u06cc\u0634 \u062e\u0648\u062f\u060c \u062a\u0633\u062a \u0648\u0631\u0648\u062f\u060c \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan make:test Feature\/LoginTest\n<\/code><\/pre>\n\n\n\n<p>\u0648 \u0627\u06cc\u0646 \u0647\u0645 \u062a\u0633\u062a \u0645\u0627 \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 restful api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">LoginTest<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">TestCase<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testRequiresEmailAndLogin<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'POST'<\/span>, <span class=\"hljs-string\">'api\/login'<\/span>)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f4\u06f2\u06f2<\/span>)\n            -&gt;assertJson(&#91;\n                <span class=\"hljs-string\">'email'<\/span> =&gt; &#91;<span class=\"hljs-string\">'The email field is required.'<\/span>],\n                <span class=\"hljs-string\">'password'<\/span> =&gt; &#91;<span class=\"hljs-string\">'The password field is required.'<\/span>],\n            ]);\n    }\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testUserLoginsSuccessfully<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        $user = factory(User::class)-&gt;create(&#91;\n            <span class=\"hljs-string\">'email'<\/span> =&gt; <span class=\"hljs-string\">'testlogin@user.com'<\/span>,\n            <span class=\"hljs-string\">'password'<\/span> =&gt; bcrypt(<span class=\"hljs-string\">'toptal123'<\/span>),\n        ]);\n        $payload = &#91;<span class=\"hljs-string\">'email'<\/span> =&gt; <span class=\"hljs-string\">'testlogin@user.com'<\/span>, <span class=\"hljs-string\">'password'<\/span> =&gt; <span class=\"hljs-string\">'toptal123'<\/span>];\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'POST'<\/span>, <span class=\"hljs-string\">'api\/login'<\/span>, $payload)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f2\u06f0\u06f0<\/span>)\n            -&gt;assertJsonStructure(&#91;\n                <span class=\"hljs-string\">'data'<\/span> =&gt; &#91;\n                    <span class=\"hljs-string\">'id'<\/span>,\n                    <span class=\"hljs-string\">'name'<\/span>,\n                    <span class=\"hljs-string\">'email'<\/span>,\n                    <span class=\"hljs-string\">'created_at'<\/span>,\n                    <span class=\"hljs-string\">'updated_at'<\/span>,\n                    <span class=\"hljs-string\">'api_token'<\/span>,\n                ],\n            ]);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0686\u0646\u062f \u0645\u0648\u0631\u062f \u0633\u0627\u062f\u0647 \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u0645\u062a\u062f json \u0628\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0628\u0631\u062e\u0648\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f. assertJson&nbsp; \u0631\u0648\u0634 \u067e\u0627\u0633\u062e \u0631\u0627 \u0628\u0647 \u0622\u0631\u0627\u06cc\u0647 \u0627\u06cc \u06a9\u0647 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0631\u0627 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc \u06a9\u0646\u062f\u060c \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u062f\u0631 \u0622\u0646 \u0645\u0647\u0645 \u0627\u0633\u062a.<\/p>\n\n\n\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0622\u0632\u0645\u0648\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062b\u0628\u062a \u0646\u0627\u0645 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan make:test RegisterTest\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">RegisterTest<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">TestCase<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testsRegistersSuccessfully<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        $payload = &#91;\n            <span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'John'<\/span>,\n            <span class=\"hljs-string\">'email'<\/span> =&gt; <span class=\"hljs-string\">'john@toptal.com'<\/span>,\n            <span class=\"hljs-string\">'password'<\/span> =&gt; <span class=\"hljs-string\">'toptal123'<\/span>,\n            <span class=\"hljs-string\">'password_confirmation'<\/span> =&gt; <span class=\"hljs-string\">'toptal123'<\/span>,\n        ];\n\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'post'<\/span>, <span class=\"hljs-string\">'\/api\/register'<\/span>, $payload)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f2\u06f0\u06f1<\/span>)\n            -&gt;assertJsonStructure(&#91;\n                <span class=\"hljs-string\">'data'<\/span> =&gt; &#91;\n                    <span class=\"hljs-string\">'id'<\/span>,\n                    <span class=\"hljs-string\">'name'<\/span>,\n                    <span class=\"hljs-string\">'email'<\/span>,\n                    <span class=\"hljs-string\">'created_at'<\/span>,\n                    <span class=\"hljs-string\">'updated_at'<\/span>,\n                    <span class=\"hljs-string\">'api_token'<\/span>,\n                ],\n            ]);;\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testsRequiresPasswordEmailAndName<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'post'<\/span>, <span class=\"hljs-string\">'\/api\/register'<\/span>)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f4\u06f2\u06f2<\/span>)\n            -&gt;assertJson(&#91;\n                <span class=\"hljs-string\">'name'<\/span> =&gt; &#91;<span class=\"hljs-string\">'The name field is required.'<\/span>],\n                <span class=\"hljs-string\">'email'<\/span> =&gt; &#91;<span class=\"hljs-string\">'The email field is required.'<\/span>],\n                <span class=\"hljs-string\">'password'<\/span> =&gt; &#91;<span class=\"hljs-string\">'The password field is required.'<\/span>],\n            ]);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testsRequirePasswordConfirmation<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        $payload = &#91;\n            <span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'John'<\/span>,\n            <span class=\"hljs-string\">'email'<\/span> =&gt; <span class=\"hljs-string\">'john@toptal.com'<\/span>,\n            <span class=\"hljs-string\">'password'<\/span> =&gt; <span class=\"hljs-string\">'toptal123'<\/span>,\n        ];\n\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'post'<\/span>, <span class=\"hljs-string\">'\/api\/register'<\/span>, $payload)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f4\u06f2\u06f2<\/span>)\n            -&gt;assertJson(&#91;\n                <span class=\"hljs-string\">'password'<\/span> =&gt; &#91;<span class=\"hljs-string\">'The password confirmation does not match.'<\/span>],\n            ]);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u0648 \u062f\u0631 \u0622\u062e\u0631\u060c &nbsp;\u0622\u0632\u0645\u0627\u06cc\u0634 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646 \u062e\u0631\u0648\u062c \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 api \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan make:test LogoutTest\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">LogoutTest<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">TestCase<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testUserIsLoggedOutProperly<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        $user = factory(User::class)-&gt;create(&#91;<span class=\"hljs-string\">'email'<\/span> =&gt; <span class=\"hljs-string\">'user@test.com'<\/span>]);\n        $token = $user-&gt;generateToken();\n        $headers = &#91;<span class=\"hljs-string\">'Authorization'<\/span> =&gt; <span class=\"hljs-string\">\"Bearer $token\"<\/span>];\n\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'get'<\/span>, <span class=\"hljs-string\">'\/api\/articles'<\/span>, &#91;], $headers)-&gt;assertStatus(<span class=\"hljs-number\">\u06f2\u06f0\u06f0<\/span>);\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'post'<\/span>, <span class=\"hljs-string\">'\/api\/logout'<\/span>, &#91;], $headers)-&gt;assertStatus(<span class=\"hljs-number\">\u06f2\u06f0\u06f0<\/span>);\n\n        $user = User::find($user-&gt;id);\n\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;assertEquals(<span class=\"hljs-keyword\">null<\/span>, $user-&gt;api_token);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testUserWithNullToken<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-comment\">\/\/ Simulating login<\/span>\n        $user = factory(User::class)-&gt;create(&#91;<span class=\"hljs-string\">'email'<\/span> =&gt; <span class=\"hljs-string\">'user@test.com'<\/span>]);\n        $token = $user-&gt;generateToken();\n        $headers = &#91;<span class=\"hljs-string\">'Authorization'<\/span> =&gt; <span class=\"hljs-string\">\"Bearer $token\"<\/span>];\n\n        <span class=\"hljs-comment\">\/\/ Simulating logout<\/span>\n        $user-&gt;api_token = <span class=\"hljs-keyword\">null<\/span>;\n        $user-&gt;save();\n\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'get'<\/span>, <span class=\"hljs-string\">'\/api\/articles'<\/span>, &#91;], $headers)-&gt;assertStatus(<span class=\"hljs-number\">\u06f4\u06f0\u06f1<\/span>);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>\u062a\u0648\u062c\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0637\u0648\u0644 \u0622\u0632\u0645\u0627\u06cc\u0634\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0631\u0627\u0648\u0644 \u0645\u062c\u062f\u062f\u0627\u064b \u062f\u0631 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u062f\u06cc\u062f \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u0632\u06cc \u0646\u0645\u06cc \u0634\u0648\u062f. \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u06a9\u0647 \u0648\u0642\u062a\u06cc \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u0645\u06cc \u0632\u0646\u06cc\u0645\u060c \u06a9\u0627\u0631\u0628\u0631 \u0641\u0639\u0644\u06cc \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0646\u0645\u0648\u0646\u0647 TokenGuard \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u062c\u062f\u062f \u0628\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u062f.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0622\u0632\u0645\u0627\u06cc\u0634 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc :<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ArticleTest<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">TestCase<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testsArticlesAreCreatedCorrectly<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        $user = factory(User::class)-&gt;create();\n        $token = $user-&gt;generateToken();\n        $headers = &#91;<span class=\"hljs-string\">'Authorization'<\/span> =&gt; <span class=\"hljs-string\">\"Bearer $token\"<\/span>];\n        $payload = &#91;\n            <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'Lorem'<\/span>,\n            <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'Ipsum'<\/span>,\n        ];\n\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'POST'<\/span>, <span class=\"hljs-string\">'\/api\/articles'<\/span>, $payload, $headers)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f2\u06f0\u06f0<\/span>)\n            -&gt;assertJson(&#91;<span class=\"hljs-string\">'id'<\/span> =&gt; <span class=\"hljs-number\">\u06f1<\/span>, <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'Lorem'<\/span>, <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'Ipsum'<\/span>]);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testsArticlesAreUpdatedCorrectly<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        $user = factory(User::class)-&gt;create();\n        $token = $user-&gt;generateToken();\n        $headers = &#91;<span class=\"hljs-string\">'Authorization'<\/span> =&gt; <span class=\"hljs-string\">\"Bearer $token\"<\/span>];\n        $article = factory(Article::class)-&gt;create(&#91;\n            <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'First Article'<\/span>,\n            <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'First Body'<\/span>,\n        ]);\n\n        $payload = &#91;\n            <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'Lorem'<\/span>,\n            <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'Ipsum'<\/span>,\n        ];\n\n        $response = <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'PUT'<\/span>, <span class=\"hljs-string\">'\/api\/articles\/'<\/span> . $article-&gt;id, $payload, $headers)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f2\u06f0\u06f0<\/span>)\n            -&gt;assertJson(&#91; \n                <span class=\"hljs-string\">'id'<\/span> =&gt; <span class=\"hljs-number\">\u06f1<\/span>, \n                <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'Lorem'<\/span>, \n                <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'Ipsum'<\/span> \n            ]);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testsArtilcesAreDeletedCorrectly<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        $user = factory(User::class)-&gt;create();\n        $token = $user-&gt;generateToken();\n        $headers = &#91;<span class=\"hljs-string\">'Authorization'<\/span> =&gt; <span class=\"hljs-string\">\"Bearer $token\"<\/span>];\n        $article = factory(Article::class)-&gt;create(&#91;\n            <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'First Article'<\/span>,\n            <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'First Body'<\/span>,\n        ]);\n\n        <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'DELETE'<\/span>, <span class=\"hljs-string\">'\/api\/articles\/'<\/span> . $article-&gt;id, &#91;], $headers)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f2\u06f0\u06f4<\/span>);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">testArticlesAreListedCorrectly<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        factory(Article::class)-&gt;create(&#91;\n            <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'First Article'<\/span>,\n            <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'First Body'<\/span>\n        ]);\n\n        factory(Article::class)-&gt;create(&#91;\n            <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'Second Article'<\/span>,\n            <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'Second Body'<\/span>\n        ]);\n\n        $user = factory(User::class)-&gt;create();\n        $token = $user-&gt;generateToken();\n        $headers = &#91;<span class=\"hljs-string\">'Authorization'<\/span> =&gt; <span class=\"hljs-string\">\"Bearer $token\"<\/span>];\n\n        $response = <span class=\"hljs-keyword\">$this<\/span>-&gt;json(<span class=\"hljs-string\">'GET'<\/span>, <span class=\"hljs-string\">'\/api\/articles'<\/span>, &#91;], $headers)\n            -&gt;assertStatus(<span class=\"hljs-number\">\u06f2\u06f0\u06f0<\/span>)\n            -&gt;assertJson(&#91;\n                &#91; <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'First Article'<\/span>, <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'First Body'<\/span> ],\n                &#91; <span class=\"hljs-string\">'title'<\/span> =&gt; <span class=\"hljs-string\">'Second Article'<\/span>, <span class=\"hljs-string\">'body'<\/span> =&gt; <span class=\"hljs-string\">'Second Body'<\/span> ]\n            ])\n            -&gt;assertJsonStructure(&#91;\n                <span class=\"hljs-string\">'*'<\/span> =&gt; &#91;<span class=\"hljs-string\">'id'<\/span>, <span class=\"hljs-string\">'body'<\/span>, <span class=\"hljs-string\">'title'<\/span>, <span class=\"hljs-string\">'created_at'<\/span>, <span class=\"hljs-string\">'updated_at'<\/span>],\n            ]);\n    }\n\n}<\/code><\/pre>\n\n\n\n<p>\u0645\u0646\u0628\u0639:<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.toptal.com\/laravel\/restful-laravel-api-tutorial\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u0644\u0627\u0631\u0627\u0648\u0644 \u06cc\u06a9 \u0641\u0631\u06cc\u0645\u0648\u0631\u06a9 PHP \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0646 \u062d\u062f\u0627\u06a9\u062b\u0631 \u0628\u0647\u0631\u0647 \u0648\u0631\u06cc \u062a\u0648\u0633\u0637 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0647 \u062a\u0648\u0633\u0637 \u062a\u06cc\u0644\u0648\u0631 \u0627\u062a\u0648\u0644 \u0646\u0648\u0634\u062a\u0647 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0637\u0648\u0631\u06cc \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u06a9\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u06a9\u0627\u0631 \u0686\u0646\u062f\u0627\u0646\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u06cc\u0627\u0646 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u062f \u0648 \u0627\u06cc\u0646 [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":29638,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,30],"tags":[],"class_list":["post-29596","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming-and-it-training","category-web-programming-articles"],"_links":{"self":[{"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/posts\/29596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/comments?post=29596"}],"version-history":[{"count":2,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/posts\/29596\/revisions"}],"predecessor-version":[{"id":66193,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/posts\/29596\/revisions\/66193"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/media\/29638"}],"wp:attachment":[{"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/media?parent=29596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/categories?post=29596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/tags?post=29596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}