{"id":4087,"date":"2018-05-16T17:14:11","date_gmt":"2018-05-16T20:14:11","guid":{"rendered":"http:\/\/blog.dialhost.com.br\/?p=4087"},"modified":"2018-05-16T17:14:11","modified_gmt":"2018-05-16T20:14:11","slug":"api-resources-do-laravel-criando-repostas-restfull","status":"publish","type":"post","link":"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/","title":{"rendered":"API resources do Laravel, criando repostas RESTfull"},"content":{"rendered":"\n\t\t\t\t\n<p>Ol\u00e1 Pessoal, estou de volta depois de algum tempo. No \u00faltimo artigo eu aprofundei um pouco nos <a href=\"http:\/\/blog.dialhost.com.br\/desenvolvimento-2\/aprofundando-comandos-eloquent-laravel\/\" target=\"_blank\" rel=\"noreferrer noopener\">comandos do Eloquent<\/a>. Tinha planejado para mostrar um pouco sobre os Controllers mas, estudando a documenta\u00e7\u00e3o do Laravel 5.6 encontrei uma parte interessante para quem est\u00e1 montando API restfull para os seus webservices.&nbsp; S\u00e3o as <strong>API resources.&nbsp;<\/strong><\/p>\n\n\n\n<p>As API resources apareceram na documenta\u00e7\u00e3o do Laravel a partir da vers\u00e3o 5.5. Elas funcionam como um camada de tratamento entre o Eloquent e as respostas JSON que s\u00e3o expostas pela API. Estas classes permitem que transformemos facilmente, models e collections em JSON.<\/p>\n\n\n\n<p>N\u00e3o \u00e9 que este conceito seja completamente novo. O pr\u00f3prio Laravel, em vers\u00f5es anteriores, permite a utiliza\u00e7\u00e3o de transformers, com o Fractal, para fazer este tipo de trabalho. Mas, ao que parece, n\u00e3o \u00e9 mais necess\u00e1rio instalar o m\u00f3dulo fractal para termos este funcionamento.<\/p>\n\n\n\n<h2>Criando um Resource<\/h2>\n\n\n\n<p>A classe resource \u00e9 extremamente simples. Ela estende a classe&nbsp;<strong>JsonResource&nbsp;<\/strong>e implementa a fun\u00e7\u00e3o toArray(). Dentro desta fun\u00e7\u00e3o basta colocarmos os campos que queremos retornar na API e depois chamar a classe em sua controller ou rota.<\/p>\n\n\n\n<p>Vamos ao nosso exemplo pr\u00e1tico ent\u00e3o&#8230; No come\u00e7o desta s\u00e9rie eu criei a tabela product, onde eu cadastrei meus produtos certo? (Confira todos os posts no fim deste artigo) Ent\u00e3o para eu transformar o resource desta tabela basta eu criar a classe atrav\u00e9s do artisan:<\/p>\n\n\n<p>[code]php artisan make:resource UserResource[\/code]<\/p>\n\n\n\n<p>Sua classe ficar\u00e1 como esta<\/p>\n\n\n<p>[php]&lt;?php<\/p>\n<p>namespace App\\Http\\Resources;<\/p>\n<p>use Illuminate\\Http\\Resources\\Json\\JsonResource;<\/p>\n<p>class ProductResource extends JsonResource<br \/>\n{<br \/>\npublic function toArray($request)<br \/>\n{<br \/>\nreturn [];<br \/>\n}<br \/>\n}[\/php]<\/p>\n\n\n\n<p>Agora \u00e9 s\u00f3 adicionar as colunas que voc\u00ea quer retornar pela API Resource.<\/p>\n\n\n<p>[php]&lt;?php<\/p>\n<p>class ProductResource extends JsonResource<br \/>\n{<br \/>\npublic function toArray($request)<br \/>\n{<br \/>\nreturn [<br \/>\n&#8216;id&#8217; =&gt; $this-&gt;id,<br \/>\n&#8216;product_line_id&#8217; =&gt; $this-&gt;product_line_id,<br \/>\n&#8216;description&#8217; =&gt; $this-&gt;description,<br \/>\n&#8216;expiration_date&#8217; =&gt; $this-&gt;expiration_date,<br \/>\n&#8216;price&#8217; =&gt; $this-&gt;expiration_date,<br \/>\n];<br \/>\n}<br \/>\n}<\/p>\n<p>[\/php]<\/p>\n\n\n\n<p>Parece simples at\u00e9 demais neh. Mas \u00e9 assim mesmo que funciona. Para finalizar precisamos cham\u00e1-la em nossa rota ou Controller. Para isto basta cham\u00e1-la estaticamente.<\/p>\n\n\n<p>[php]&lt;?php<\/p>\n<p>use App\\Product;<br \/>\nuse App\\Http\\Resources\\ProductResource;<\/p>\n<p>Route::get(&#8216;\/products\/{id}&#8217;, function () {<br \/>\nreturn new ProductResource(Product::find($id));<br \/>\n});<\/p>\n<p>[\/php]<\/p>\n\n\n\n<p>Neste exemplo coloquei dentro da pr\u00f3pria rota. Mas, caso voc\u00ea queira fazer mais algum processo ap\u00f3s receber seu novo JSON aconselho que mande isto para uma fun\u00e7\u00e3o na respectiva Controller. Assim, seu c\u00f3digo ficar\u00e1 mais organizado.<\/p>\n\n\n\n<h2>Criando uma API Resource Collections<\/h2>\n\n\n\n<p>A classe Resource trabalha com um \u00fanico model e o transforma em Array. A collection, por sua vez, trabalha com toda a cole\u00e7\u00e3o de dados da model. Mas n\u00e3o se espante, para utiliz\u00e1-la \u00e9 bem simples. Ao inv\u00e9s de instanciar o ProductResource, basta chamar o metodo collection estaticamente na rota ou controller.<\/p>\n\n\n<p>[php]&lt;?php<\/p>\n<p>use App\\Product;<br \/>\nuse App\\Http\\Resources\\ProductResource;<\/p>\n<p>Route::get(&#8216;\/products\/&#8217;, function () {<br \/>\nreturn ProductResource::collection(Product::all());<br \/>\n});<\/p>\n<p>[\/php]<\/p>\n\n\n\n<p>Agora se quiser personalizar o retorno da Collection com alguns meta datas diferentes voc\u00ea pode criar uma classe separada para trabalhar em cima do Resource.<\/p>\n\n\n<p>[php]&lt;?php<\/p>\n<p>namespace App\\Http\\Resources;<\/p>\n<p>use Illuminate\\Http\\Resources\\Json\\ResourceCollection;<\/p>\n<p>class ProductCollection extends ResourceCollection<br \/>\n{<\/p>\n<p>public function toArray($request)<br \/>\n{<br \/>\nreturn [<br \/>\n&#8216;data&#8217; =&gt; $this-&gt;collection,<br \/>\n&#8216;links&#8217; =&gt; [<br \/>\n&#8216;self&#8217; =&gt; &#8216;link&#8217;,<br \/>\n],<br \/>\n];<br \/>\n}<br \/>\n}<\/p>\n<p>[\/php]<\/p>\n\n\n\n<h2>Concluindo<\/h2>\n\n\n\n<p>O Laravel nasceu com sua natureza e objetivos voltados para o paradigma do REST. A API Resources s\u00e3o a prova de como a comunidade Laravel est\u00e1 trabalhando para trazer formas otimizadas e simples no trabalho com APIs. Neste artigo apenas pincelei conceitos b\u00e1sicos da utiliza\u00e7\u00e3o desta funcionalidade, mas acredito que eu v\u00e1 me aprofundar mais neste assunto. Espero que tenham gostado e at\u00e9 a pr\u00f3xima.<\/p>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\t\t\t\tAs API resources apareceram na documenta\u00e7\u00e3o do Laravel a partir da vers\u00e3o 5.5. Elas funcionam como um camada de tratamento entre o Eloquent e as respostas JSON que s\u00e3o expostas pela API.\t\t\t\t<\/p>\n","protected":false},"author":1,"featured_media":7590,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23,24,12],"tags":[76,138],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>API resources do Laravel, criando repostas RESTfull - Blog DialHost<\/title>\n<meta name=\"description\" content=\"As API resources funcionam como um camada de tratamento entre o Eloquent e as respostas JSON que ser\u00e3o expostas \u00e0 uma API.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"API resources do Laravel, criando repostas RESTfull - Blog DialHost\" \/>\n<meta property=\"og:description\" content=\"As API resources funcionam como um camada de tratamento entre o Eloquent e as respostas JSON que ser\u00e3o expostas \u00e0 uma API.\" \/>\n<meta property=\"og:url\" content=\"\/blog\/api-resources-do-laravel-criando-repostas-restfull\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog DialHost\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/DialHost\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/DialHost\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-16T20:14:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2018\/05\/api-ressources-laravel-2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"520\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dialhost\" \/>\n<meta name=\"twitter:site\" content=\"@dialhost\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\",\"name\":\"DialHost Internet\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/\",\"sameAs\":[\"http:\/\/www.facebook.com\/DialHost\",\"https:\/\/www.instagram.com\/dialhost_oficial\/\",\"https:\/\/www.linkedin.com\/company\/dialhost-internet\",\"https:\/\/www.youtube.com\/channel\/UCAiqiX8IiqTSfA8wQhpzgXQ\",\"https:\/\/twitter.com\/dialhost\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#logo\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2019\/03\/marca-dialhost.png\",\"width\":81,\"height\":81,\"caption\":\"DialHost Internet\"},\"image\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#website\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/\",\"name\":\"Blog DialHost\",\"description\":\"Os melhores conte\\u00fados sobre Desenvolvimento Web, Marketing e Neg\\u00f3cios\",\"publisher\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.dialhost.com.br\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2018\/05\/api-ressources-laravel-2.jpg\",\"width\":1400,\"height\":520,\"caption\":\"\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#webpage\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/\",\"name\":\"API resources do Laravel, criando repostas RESTfull - Blog DialHost\",\"isPartOf\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#primaryimage\"},\"datePublished\":\"2018-05-16T20:14:11+00:00\",\"dateModified\":\"2018-05-16T20:14:11+00:00\",\"description\":\"As API resources funcionam como um camada de tratamento entre o Eloquent e as respostas JSON que ser\\u00e3o expostas \\u00e0 uma API.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"\/blog\/\",\"url\":\"\/blog\/\",\"name\":\"In\\u00edcio\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"\/blog\/api-resources-do-laravel-criando-repostas-restfull\/\",\"url\":\"\/blog\/api-resources-do-laravel-criando-repostas-restfull\/\",\"name\":\"API resources do Laravel, criando repostas RESTfull\"}}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#\/schema\/person\/a0b10cbe35449dea173a06d4664f9fcc\"},\"headline\":\"API resources do Laravel, criando repostas RESTfull\",\"datePublished\":\"2018-05-16T20:14:11+00:00\",\"dateModified\":\"2018-05-16T20:14:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#webpage\"},\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#primaryimage\"},\"keywords\":\"desenvolvimento,laravel\",\"articleSection\":\"Laravel,PHP,Tecnologias\",\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dialhost.com.br\/blog\/api-resources-do-laravel-criando-repostas-restfull\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#\/schema\/person\/a0b10cbe35449dea173a06d4664f9fcc\",\"name\":\"DialHost Internet\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#personlogo\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/05feec2f99aef1c42b09aeaa637ee66f?s=96&r=g\",\"caption\":\"DialHost Internet\"},\"description\":\"H\\u00e1 mais de 18 anos proporcionando um servi\\u00e7o de hospedagem de sites voltado 100% na Experi\\u00eancia e Sucesso do Cliente, prezando a qualidade, transpar\\u00eancia e seguran\\u00e7a.\",\"sameAs\":[\"https:\/\/www.facebook.com\/DialHost\",\"https:\/\/www.instagram.com\/dialhost_oficial\/\",\"https:\/\/www.linkedin.com\/company\/dialhost-internet\",\"https:\/\/twitter.com\/dialhost\",\"https:\/\/www.youtube.com\/channel\/UCAiqiX8IiqTSfA8wQhpzgXQ\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts\/4087"}],"collection":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/comments?post=4087"}],"version-history":[{"count":0,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts\/4087\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/media\/7590"}],"wp:attachment":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=4087"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=4087"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=4087"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}