{"id":17290,"date":"2022-11-12T11:56:43","date_gmt":"2022-11-12T11:56:43","guid":{"rendered":"https:\/\/soloweb.com.br\/blog\/?p=17290"},"modified":"2023-04-02T12:56:50","modified_gmt":"2023-04-02T12:56:50","slug":"construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2","status":"publish","type":"post","link":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/","title":{"rendered":"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2)"},"content":{"rendered":"\n<p>Na primeira parte deste artigo, iniciamos esta s\u00e9rie, caso chegou aqui e ainda n\u00e3o viu recomendo ver a parte 1 primeiro.<\/p>\n\n\n\n<p>Abaixo o link do primeiro artigo desta s\u00e9rie.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-soloweb-tecnologia wp-block-embed-soloweb-tecnologia\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"yhDbWsKa2F\"><a href=\"https:\/\/soloweb.com.br\/blog\/2022\/11\/04\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-1\/\">Construindo e consumindo uma API RESTful no Laravel 9 (parte 1)<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Construindo e consumindo uma API RESTful no Laravel 9 (parte 1)&#8221; &#8212; SoloWeb\" src=\"https:\/\/soloweb.com.br\/blog\/2022\/11\/04\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-1\/embed\/#?secret=8xVLwmofLD#?secret=yhDbWsKa2F\" data-secret=\"yhDbWsKa2F\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Na parte 1 finalizamos populando nossa tabela de tarefas com dados fake.<\/p>\n\n\n\n<p>Ent\u00e3o agora com nosso Model ok e com nossa tabela populada com exemplos fict\u00edcios j\u00e1 podemos fazer testes com nossa&nbsp;<strong>routes\/api.php<\/strong>&nbsp;mas antes vamos criar nosso controller.<\/p>\n\n\n\n<p>O arquivo de rota atualmente hospeda a l\u00f3gica para roteamento e tratamento de solicita\u00e7\u00f5es.&nbsp;Podemos mover a l\u00f3gica de manipula\u00e7\u00e3o de requisi\u00e7\u00f5es para uma classe Controller para que nosso c\u00f3digo fique melhor organizado e mais leg\u00edvel.&nbsp;Vamos gerar uma classe de controlador primeiro.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ php artisan make:controller TarefasController<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"61\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-7.png\" alt=\"\" class=\"wp-image-17272\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-7.png 788w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-7-300x23.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-7-768x59.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-7-150x12.png 150w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \/><\/figure>\n\n\n\n<p>A classe Controller compreende v\u00e1rios m\u00e9todos (index, show, store, update e delete) que correspondem a diferentes a\u00e7\u00f5es HTTP. Mudei a l\u00f3gica de manipula\u00e7\u00e3o de solicita\u00e7\u00f5es da rota para o controlador. O TarefasControllerque \u00e9 encontrado em&nbsp;<strong><em>app\/Http\/Controllers\/TarefasController.php<\/em><\/strong><\/p>\n\n\n\n<p>Nosso&nbsp;<strong><em>TarefasController.php<\/em><\/strong>&nbsp;ficou assim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse App\\Models\\Tarefa;\n\nclass TarefasController extends Controller\n{\n    public function index()\n    {\n        return Tarefa::all();\n    }\n \n    public function show(Tarefa $tarefa)\n    {\n        return $tarefa;\n    }\n \n    public function store(Request $request)\n    {\n        $tarefa = Tarefa::create($request-&gt;all());\n \n        return response()-&gt;json($tarefa, 201);\n    }\n \n    public function update(Request $request, Tarefa $tarefa)\n    {\n        $tarefa-&gt;update($request-&gt;all());\n \n        return response()-&gt;json($tarefa, 200);\n    }\n \n    public function delete(Tarefa $tarefa)\n    {\n        $tarefa-&gt;delete();\n \n        return response()-&gt;json(null, 204);\n    }\n}<\/code><\/pre>\n\n\n\n<p>Agora, sim, podemos voltar para o nosso&nbsp;<strong>routes\/api.php<\/strong>&nbsp;e aplicar nossas rotas finais.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nuse App\\Http\\Controllers\\TarefasController;\n \n\/**\n**Basic Routes for a RESTful service:\n**Route::get($uri, $callback);\n**Route::post($uri, $callback);\n**Route::put($uri, $callback);\n**Route::delete($uri, $callback);\n**\n*\/\n \nRoute::get('tarefas', &#91;TarefasController::class, 'index']);\nRoute::get('tarefas\/{tarefa}', &#91;TarefasController::class,'show']); \nRoute::post('tarefas',&#91;TarefasController::class,'store']);\nRoute::put('tarefas\/{tarefa}',&#91;TarefasController::class,'update']);\nRoute::delete('tarefas\/{tarefa}', &#91;TarefasController::class,'delete']); <\/code><\/pre>\n\n\n\n<p>Vamos agora fazer uma requisi\u00e7\u00e3o para testar nosso endpoint.<\/p>\n\n\n\n<p>Buscando o registro de id igual a 50.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1017\" height=\"485\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-10.png\" alt=\"\" class=\"wp-image-17276\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-10.png 1017w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-10-300x143.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-10-768x366.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-10-150x72.png 150w\" sizes=\"auto, (max-width: 1017px) 100vw, 1017px\" \/><\/figure>\n\n\n\n<p>Buscando tosdos dos registros.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"812\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-11-1024x812.png\" alt=\"\" class=\"wp-image-17277\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-11-1024x812.png 1024w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-11-300x238.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-11-768x609.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-11-150x119.png 150w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-11.png 1086w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Valida\u00e7\u00e3o e Tratamento de Exce\u00e7\u00f5es<\/strong><\/p>\n\n\n\n<p>Se voc\u00ea for para um recurso inexistente, \u00e9 isso que voc\u00ea ver\u00e1. Tentando encontrar a tarefa de id igual a 101 que n\u00e3o existe em nossa base de dados.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"257\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-8-1024x257.png\" alt=\"\" class=\"wp-image-17274\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-8-1024x257.png 1024w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-8-300x75.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-8-768x193.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-8-150x38.png 150w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-8.png 1051w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u00c9&nbsp;<strong><em>NotFoundHTTPExceptionassim<\/em><\/strong>&nbsp;que o Laravel exibe o erro 404. Se voc\u00ea quiser que o servidor retorne uma resposta JSON, voc\u00ea ter\u00e1 que alterar o comportamento de manipula\u00e7\u00e3o de exce\u00e7\u00e3o padr\u00e3o. O Laravel tem uma classe&nbsp;<strong><em>Handler<\/em><\/strong>&nbsp;dedicada ao tratamento de exce\u00e7\u00f5es localizada em&nbsp;<strong><em>app\/Exceptions\/Handler.php<\/em><\/strong>. A classe tem principalmente dois m\u00e9todos:&nbsp;<strong><em>report() e render()<\/em><\/strong>. O m\u00e9todo&nbsp;<em><strong>report<\/strong><\/em>&nbsp;\u00e9 \u00fatil para relatar e registrar eventos de exce\u00e7\u00e3o, enquanto o m\u00e9todo&nbsp;<strong><em>render<\/em><\/strong>&nbsp;\u00e9 usado para retornar uma resposta quando uma exce\u00e7\u00e3o \u00e9 encontrada. Atualize o m\u00e9todo de renderiza\u00e7\u00e3o para retornar uma resposta JSON:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public function render($request, Exception $exception)\n  {\n     \n      if ($exception instanceof \\Illuminate\\Database\\Eloquent\\ModelNotFoundException) \n      {\n       return response()-&gt;json(&#91;\n            'message' =&gt; 'Resource not found'\n        ], 404);\n      }\n       \n      return parent::render($request, $exception);\n  }<\/code><\/pre>\n\n\n\n<p>E realizando a mesma requisi\u00e7\u00e3o temos agora o retorno json esperado.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"464\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-9.png\" alt=\"\" class=\"wp-image-17275\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-9.png 618w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-9-300x225.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-9-150x113.png 150w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><\/figure>\n\n\n\n<p>Consumindo nossa API.<\/p>\n\n\n\n<p>Vamos agora ver alguns exemplos de como cosumir nossa API. Para isso vamos construir exemplos simples e bem pr\u00e1tico, em uma outra pasta fora do nosso projeto vamos criar uma pasta e dentro dela um arquivo chamado&nbsp;<strong><em>(index.html<\/em><\/strong>)<\/p>\n\n\n\n<p>Neste arquivo HTML vamos colocar nossos JavaScript para acessar nossa API, para nossos exempos n\u00e3o vamos utilizar nenhuma biblioteca ou framework js, vamos fazer tudo com JavaScript puro.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"554\" height=\"62\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-12.png\" alt=\"\" class=\"wp-image-17279\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-12.png 554w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-12-300x34.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-12-150x17.png 150w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"460\" height=\"172\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-13.png\" alt=\"\" class=\"wp-image-17280\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-13.png 460w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-13-300x112.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-13-150x56.png 150w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\nfetch('http:\/\/127.0.0.1:8000\/api\/tarefas').then(function (response) {\n    console.log('API call')\n}).then(function (data) {\n\tconsole.log(data);\n}).catch(function (err) {\t\n\tconsole.warn('Ocorreu um erro.', err);\n});\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<p>Acima estamos fazendo um fetch para obter todas as tarefas, e este \u00e9 nosso retorno:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"347\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-14-1024x347.png\" alt=\"\" class=\"wp-image-17281\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-14-1024x347.png 1024w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-14-300x102.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-14-768x260.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-14-150x51.png 150w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-14.png 1042w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Agora vamos obter um registro espec\u00edfico.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\nfetch('http:\/\/127.0.0.1:8000\/api\/tarefas\/22').then(function (response) {\n    console.log('API call')\n}).then(function (data) {\n\tconsole.log(data);\n}).catch(function (err) {\t\n\tconsole.warn('Ocorreu um erro.', err);\n});\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"314\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-15.png\" alt=\"\" class=\"wp-image-17282\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-15.png 1010w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-15-300x93.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-15-768x239.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-15-150x47.png 150w\" sizes=\"auto, (max-width: 1010px) 100vw, 1010px\" \/><\/figure>\n\n\n\n<p>Vamos ent\u00e3o inserir dados na nossa base por meio da API, com o seguinte c\u00f3digo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\nfetch('http:\/\/127.0.0.1:8000\/api\/tarefas', {\n  method: 'POST',\n  headers: {\n    'Accept': 'application\/json, text\/plain, *\/*',\n    'Content-Type': 'application\/json'\n  },\n  body: JSON.stringify( {\n    descricao: 'Concluir post sobre API Laravel', \n    concluido: 0\n  })\n}).then(res =&gt; res.json())\n  .then(res =&gt; console.log(res));\n\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<p>Observe que estamos montando o corpo que nosso POST com informa\u00e7\u00f5es dos campos:&nbsp;<strong><em>descricao e concluido<\/em><\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"829\" height=\"301\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-16.png\" alt=\"\" class=\"wp-image-17283\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-16.png 829w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-16-300x109.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-16-768x279.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-16-150x54.png 150w\" sizes=\"auto, (max-width: 829px) 100vw, 829px\" \/><\/figure>\n\n\n\n<p>Como j\u00e1 temos 50 registro gerados pelo nosso Seeder, o registro de id igual a 51 foi exatamente este que inserimos agora pela API.<\/p>\n\n\n\n<p>Outra forma de inserir usando o objeto XMLHttpRequest.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\n\n(async () =&gt; {\n  const response = await fetch('http:\/\/127.0.0.1:8000\/api\/tarefas', {\n    method: 'POST',\n    headers: {\n      'Accept': 'application\/json',\n      'Content-Type': 'application\/json'\n    },\n    body: JSON.stringify({\n        descricao: 'Minha nova tarefa!',     \n        concluido: 0\n    })\n  });\n  const content = await response.json();\n  console.log(content);\n})();\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"986\" height=\"340\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-17.png\" alt=\"\" class=\"wp-image-17285\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-17.png 986w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-17-300x103.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-17-768x265.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-17-150x52.png 150w\" sizes=\"auto, (max-width: 986px) 100vw, 986px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"296\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-18.png\" alt=\"\" class=\"wp-image-17286\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-18.png 945w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-18-300x94.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-18-768x241.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/image-18-150x47.png 150w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\n\n\n\n<p>Tentamos simplificar um pouco j\u00e1 que abordamos v\u00e1rios assunto nestes post, para n\u00e3o ficar uma leitura muito extensa.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na primeira parte deste artigo, iniciamos esta s\u00e9rie, caso chegou aqui e ainda n\u00e3o viu recomendo ver a parte 1<\/p>\n","protected":false},"author":4,"featured_media":17296,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","footnotes":""},"categories":[106,132],"tags":[269,139,70,323],"class_list":["post-17290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","category-php","tag-api","tag-laravel","tag-php","tag-restful"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Construindo e consumindo uma API RESTful no Laravel 9 (parte 2) - SOLOWEB Tecnologia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2) - SOLOWEB Tecnologia\" \/>\n<meta property=\"og:description\" content=\"Na primeira parte deste artigo, iniciamos esta s\u00e9rie, caso chegou aqui e ainda n\u00e3o viu recomendo ver a parte 1\" \/>\n<meta property=\"og:url\" content=\"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/\" \/>\n<meta property=\"og:site_name\" content=\"SOLOWEB Tecnologia\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-12T11:56:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-02T12:56:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"940\" \/>\n\t<meta property=\"og:image:height\" content=\"787\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Carlos Rolim\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlos Rolim\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/\"},\"author\":{\"name\":\"Carlos Rolim\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/b10ff5bc260b411c2d82b19fad8ae3f1\"},\"headline\":\"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2)\",\"datePublished\":\"2022-11-12T11:56:43+00:00\",\"dateModified\":\"2023-04-02T12:56:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/\"},\"wordCount\":569,\"publisher\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg\",\"keywords\":[\"api\",\"laravel\",\"PHP\",\"restful\"],\"articleSection\":[\"Desenvolvimento\",\"PHP\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/\",\"name\":\"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2) - SOLOWEB Tecnologia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg\",\"datePublished\":\"2022-11-12T11:56:43+00:00\",\"dateModified\":\"2023-04-02T12:56:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg\",\"contentUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg\",\"width\":940,\"height\":787},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2022\\\/11\\\/12\\\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/\",\"name\":\"SOLOWEB Tecnologia\",\"description\":\"SOLOWEB Tecnologia\",\"publisher\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#organization\",\"name\":\"SOLOWEB Tecnologia\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-solo.png\",\"contentUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-solo.png\",\"width\":341,\"height\":94,\"caption\":\"SOLOWEB Tecnologia\"},\"image\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/b10ff5bc260b411c2d82b19fad8ae3f1\",\"name\":\"Carlos Rolim\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/avatar_user_4_1674993909-96x96.png\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/avatar_user_4_1674993909-96x96.png\",\"contentUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/avatar_user_4_1674993909-96x96.png\",\"caption\":\"Carlos Rolim\"},\"sameAs\":[\"http:\\\/\\\/carlosrolim.com\"],\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/author\\\/carlos\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2) - SOLOWEB Tecnologia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/","og_locale":"pt_BR","og_type":"article","og_title":"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2) - SOLOWEB Tecnologia","og_description":"Na primeira parte deste artigo, iniciamos esta s\u00e9rie, caso chegou aqui e ainda n\u00e3o viu recomendo ver a parte 1","og_url":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/","og_site_name":"SOLOWEB Tecnologia","article_published_time":"2022-11-12T11:56:43+00:00","article_modified_time":"2023-04-02T12:56:50+00:00","og_image":[{"width":940,"height":787,"url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg","type":"image\/jpeg"}],"author":"Carlos Rolim","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Carlos Rolim","Est. tempo de leitura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/#article","isPartOf":{"@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/"},"author":{"name":"Carlos Rolim","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/b10ff5bc260b411c2d82b19fad8ae3f1"},"headline":"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2)","datePublished":"2022-11-12T11:56:43+00:00","dateModified":"2023-04-02T12:56:50+00:00","mainEntityOfPage":{"@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/"},"wordCount":569,"publisher":{"@id":"https:\/\/soloweb.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/#primaryimage"},"thumbnailUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg","keywords":["api","laravel","PHP","restful"],"articleSection":["Desenvolvimento","PHP"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/","url":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/","name":"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2) - SOLOWEB Tecnologia","isPartOf":{"@id":"https:\/\/soloweb.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/#primaryimage"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/#primaryimage"},"thumbnailUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg","datePublished":"2022-11-12T11:56:43+00:00","dateModified":"2023-04-02T12:56:50+00:00","breadcrumb":{"@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/#primaryimage","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-04-at-09.29.41.jpeg","width":940,"height":787},{"@type":"BreadcrumbList","@id":"https:\/\/soloweb.com.br\/blog\/2022\/11\/12\/construindo-e-consumindo-uma-api-restful-no-laravel-9-parte-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/soloweb.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Construindo e consumindo uma API RESTful no Laravel 9 (parte 2)"}]},{"@type":"WebSite","@id":"https:\/\/soloweb.com.br\/blog\/#website","url":"https:\/\/soloweb.com.br\/blog\/","name":"SOLOWEB Tecnologia","description":"SOLOWEB Tecnologia","publisher":{"@id":"https:\/\/soloweb.com.br\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/soloweb.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/soloweb.com.br\/blog\/#organization","name":"SOLOWEB Tecnologia","url":"https:\/\/soloweb.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/04\/cropped-solo.png","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/04\/cropped-solo.png","width":341,"height":94,"caption":"SOLOWEB Tecnologia"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/b10ff5bc260b411c2d82b19fad8ae3f1","name":"Carlos Rolim","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png","caption":"Carlos Rolim"},"sameAs":["http:\/\/carlosrolim.com"],"url":"https:\/\/soloweb.com.br\/blog\/author\/carlos\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/17290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=17290"}],"version-history":[{"count":6,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/17290\/revisions"}],"predecessor-version":[{"id":17821,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/17290\/revisions\/17821"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/media\/17296"}],"wp:attachment":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=17290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=17290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=17290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}