{"id":59597,"date":"2023-10-19T08:24:56","date_gmt":"2023-10-19T11:24:56","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=59597&#038;preview=true&#038;preview_id=59597"},"modified":"2023-10-24T03:08:17","modified_gmt":"2023-10-24T06:08:17","slug":"laravel-api","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/","title":{"rendered":"API do Laravel: Criando e Testando uma API no Laravel"},"content":{"rendered":"<p>O Laravel <a href=\"https:\/\/laravel.com\/docs\/9.x\/eloquent\" target=\"_blank\" rel=\"noopener noreferrer\">Eloquent<\/a> \u00e9 uma maneira f\u00e1cil de interagir com seu banco de dados. \u00c9 um mapeador objeto-relacional (ORM) que simplifica as complexidades dos bancos de dados, fornecendo um modelo para interagir com as tabelas.<\/p>\n<p>Como tal, o Laravel Eloquent tem excelentes ferramentas para criar e testar APIs para dar suporte ao seu desenvolvimento. Neste artigo pr\u00e1tico, voc\u00ea ver\u00e1 como \u00e9 f\u00e1cil criar e testar APIs usando o Laravel.<\/p>\n<p>Nesta demonstra\u00e7\u00e3o, voc\u00ea come\u00e7ar\u00e1 criando um modelo que pode ser usado para criar a <a href=\"https:\/\/kinsta.com\/pt\/blog\/endpoint-api\/\">API<\/a> e a tabela do banco de dados. Da\u00ed ver\u00e1 como adicionar um controlador como camada de l\u00f3gica de neg\u00f3cios e uma rota para concluir a API. Em seguida, voc\u00ea aprender\u00e1 a realizar testes de APIs usando o Postman antes de finalmente se concentrar na autentica\u00e7\u00e3o e no tratamento de erros.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Pr\u00e9-requisitos<\/h2>\n<p>Para come\u00e7ar, eis o que voc\u00ea precisar\u00e1:<\/p>\n<ul>\n<li><a href=\"https:\/\/laravel.com\/docs\/9.x\/installation\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel vers\u00e3o 8 ou 9<\/a><\/li>\n<li><a href=\"https:\/\/getcomposer.org\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a><\/li>\n<li><a href=\"https:\/\/www.postman.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Postman<\/a><\/li>\n<li><a href=\"https:\/\/www.apachefriends.org\/download.html\" target=\"_blank\" rel=\"noopener noreferrer\">XAMPP<\/a><\/li>\n<li>Conhecimento b\u00e1sico de APIs e <a href=\"https:\/\/kinsta.com\/pt\/php\/\">PHP<\/a><\/li>\n<\/ul>\n<h2>No\u00e7\u00f5es b\u00e1sicas de API<\/h2>\n<p>Comece criando um novo projeto Laravel usando <code>composer<\/code>:<\/p>\n<pre><code class=\"language-bash\">composer create-project laravel\/laravel laravel-api-create-test<\/code><\/pre>\n<p>Para iniciar o servidor, execute o seguinte comando, que roda o servidor de aplicativos na porta 8000:<\/p>\n<pre><code class=\"language-bash\">cd laravel-api-create-test\nphp artisan serve<\/code><\/pre>\n<p>Voc\u00ea dever\u00e1 ver a tela a seguir:<\/p>\n<figure style=\"width: 1250px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/laravel-landing-page.png\" alt=\"A p\u00e1gina de destino do Laravel\" width=\"1250\" height=\"679\"><figcaption class=\"wp-caption-text\">Laravel.<\/figcaption><\/figure>\n<p>Em seguida crie um modelo com um flag <code>-m<\/code> para a migra\u00e7\u00e3o usando o c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-bash\">php artisan make:model Product -m<\/code><\/pre>\n<p>Agora atualize o arquivo de migra\u00e7\u00e3o para incluir o campo obrigat\u00f3rio. Adicione os campos de t\u00edtulo e descri\u00e7\u00e3o para o modelo de produto e esses dois campos de tabela dentro do arquivo <strong>database\/migrations\/{date_stamp}_create_products_table.php<\/strong>.<\/p>\n<pre><code class=\"language-php\">$table-&gt;string('title');\n$table-&gt;longText('description');<\/code><\/pre>\n<p>A pr\u00f3xima etapa \u00e9 tornar esses campos preench\u00edveis. Dentro de <strong>app\/Models\/Product<\/strong><strong>.php<\/strong>, torne os campos <code>title<\/code> e <code>description<\/code> preench\u00edveis.<\/p>\n<pre><code class=\"language-php\">protected $fillable = ['title', 'description'];<\/code><\/pre>\n\n<h2>Como criar um controlador<\/h2>\n<p>Agora crie um arquivo controlador para o produto executando o seguinte comando, que criar\u00e1 o arquivo <strong>app\/Http\/Controllers\/Api\/ProductController.php<\/strong>:<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller ApiProductController --model=Product<\/code><\/pre>\n<p>Adicione a l\u00f3gica para criar e recuperar os produtos. Dentro do m\u00e9todo <code>index<\/code>, adicione o seguinte c\u00f3digo para recuperar todos os produtos:<\/p>\n<pre><code class=\"language-php\">$products = Product::all();\nreturn response()-&gt;json([\n    'status' =&gt; true,\n    'products' =&gt; $products\n]);<\/code><\/pre>\n<p>Depois disso, voc\u00ea deve adicionar uma classe <code>StoreProductRequest<\/code> para armazenar os novos produtos no banco de dados. Adicione a seguinte classe na parte superior do mesmo arquivo.<\/p>\n<pre><code class=\"language-php\">public function store(StoreProductRequest $request)\n {\n    $product = Product::create($request-&gt;all());\n\n    return response()-&gt;json([\n        'status' =&gt; true,\n        'message' =&gt; \"Product Created successfully!\",\n        'product' =&gt; $product\n    ], 200);\n }<\/code><\/pre>\n<p>Ent\u00e3o crie a solicita\u00e7\u00e3o, executando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">php artisan make:request StoreProductRequest<\/code><\/pre>\n<p>Se quiser adicionar valida\u00e7\u00f5es, voc\u00ea pode usar o arquivo <strong>app\/Http\/Requests\/StoreProductRequest.php<\/strong>. Para esta demonstra\u00e7\u00e3o, n\u00e3o h\u00e1 valida\u00e7\u00f5es.<\/p>\n<h2>Como criar uma rota<\/h2>\n<p>A etapa final antes de testar a API \u00e9 adicionar uma rota. Para isso, adicione o seguinte c\u00f3digo no arquivo <strong>routes\/api.php<\/strong>. Adicione a instru\u00e7\u00e3o <code>use<\/code> no in\u00edcio do arquivo e a instru\u00e7\u00e3o <code>Route<\/code> no corpo:<\/p>\n<pre><code class=\"language-php\">use AppHttpControllersApiProductController;\nRoute::apiResource('products', ProductController::class);<\/code><\/pre>\n<p>Antes come\u00e7ar a testar a API, certifique-se de que a tabela de <strong>produtos<\/strong> esteja em seu banco de dados. Se ela n\u00e3o existir, crie uma usando um painel de controle como o XAMPP. Como alternativa, voc\u00ea pode executar o seguinte comando para migrar o banco de dados:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<h2>Como testar uma API<\/h2>\n<p>Antes de testar a API, verifique se o m\u00e9todo\u00a0<code>authorize<\/code> dentro de <strong>app\/Http\/Requests\/StoreProductRequest.php<\/strong> est\u00e1 definido para retornar <code>true<\/code>.<\/p>\n<p>Agora voc\u00ea pode criar um novo produto usando o Postman. Comece fazendo uma solicita\u00e7\u00e3o <code>POST<\/code> para esta URL: <a href=\"http:\/\/127.0.0.1:8000\/api\/products\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/127.0.0.1:8000\/api\/products\/<\/a>. Como se trata de uma solicita\u00e7\u00e3o <code>POST<\/code> para criar um novo produto, voc\u00ea deve passar um objeto JSON com um t\u00edtulo e uma descri\u00e7\u00e3o.<\/p>\n<pre><code class=\"language-php\">{\n    \"title\":\"Apple\",\n    \"description\":\"Best Apples of the world\"\n}<\/code><\/pre>\n<figure style=\"width: 680px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/create-product-postman.png\" alt=\"Criando um novo produto no Postman.\" width=\"680\" height=\"287\"><figcaption class=\"wp-caption-text\">Criando um novo produto no Postman.<\/figcaption><\/figure>\n<p>Depois de clicar no bot\u00e3o <strong>Send <\/strong>(Enviar), voc\u00ea dever\u00e1 ver o seguinte:<\/p>\n<figure style=\"width: 572px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/postman-code.png\" alt=\"Ap\u00f3s clicar em Send.\" width=\"572\" height=\"326\"><figcaption class=\"wp-caption-text\">Ap\u00f3s clicar em Send.<\/figcaption><\/figure>\n<p>Agora busque os produtos criados usando a solicita\u00e7\u00e3o <code>GET<\/code>. A <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-uma-url\/\">URL<\/a> \u00e9 a mesma. Os resultados ser\u00e3o parecidos com os seguintes:<\/p>\n<figure style=\"width: 792px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/get-code-products-fetched.png\" alt=\"Os produtos obtidos pela solicita\u00e7\u00e3o GET.\" width=\"792\" height=\"860\"><figcaption class=\"wp-caption-text\">Os produtos obtidos pela solicita\u00e7\u00e3o GET.<\/figcaption><\/figure>\n<h2>Como autenticar uma API usando o Sanctum<\/h2>\n<p>A autentica\u00e7\u00e3o \u00e9 crucial quando voc\u00ea est\u00e1 protegendo uma API. O Laravel facilita isso fornecendo a funcionalidade do token Sanctum, que voc\u00ea pode usar como middleware. Ele protege a API usando tokens gerados quando o usu\u00e1rio faz login com as credenciais corretas. Lembre-se de que os usu\u00e1rios n\u00e3o podem acessar a API protegida sem um token.<\/p>\n<p>A primeira etapa para adicionar a autentica\u00e7\u00e3o \u00e9 adicionar um pacote Sanctum usando o c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-bash\">composer require laravel\/sanctum<\/code><\/pre>\n<p>Da\u00ed publique o arquivo de configura\u00e7\u00e3o do Sanctum:<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish --provider=\"LaravelSanctumSanctumServiceProvider\"<\/code><\/pre>\n<p>Depois disso, adicione o token do Sanctum como middleware. Dentro do arquivo <strong>app\/Http\/Kernel.php<\/strong>, use a seguinte classe e substitua <code>middlewareGroups<\/code> pelo seguinte c\u00f3digo na API dos grupos de middleware protegidos.<\/p>\n<pre><code class=\"language-php\">use LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful;<\/code><\/pre>\n<pre><code class=\"language-php\">protected $middlewareGroups = [\n    'web' =&gt; [\n        AppHttpMiddlewareEncryptCookies::class,\n        IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,\n        IlluminateSessionMiddlewareStartSession::class,\n        \/\/ IlluminateSessionMiddlewareAuthenticateSession::class,\n        IlluminateViewMiddlewareShareErrorsFromSession::class,\n        AppHttpMiddlewareVerifyCsrfToken::class,\n        IlluminateRoutingMiddlewareSubstituteBindings::class,\n    ],\n\n    'api' =&gt; [\n        EnsureFrontendRequestsAreStateful::class,\n        'throttle:api',\n        IlluminateRoutingMiddlewareSubstituteBindings::class,\n    ],\n];<\/code><\/pre>\n<p>O pr\u00f3ximo passo \u00e9 criar um <code>UserController<\/code> e adicionar o c\u00f3digo para obter o token para autentica\u00e7\u00e3o.<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller UserController<\/code><\/pre>\n<p>Ap\u00f3s criar o <code>UserController<\/code>, navegue at\u00e9 o arquivo <strong>app\/Http\/Controllers\/UserController.php<\/strong> e substitua o c\u00f3digo existente pelo c\u00f3digo a seguir:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse AppModelsUser;\nuse IlluminateSupportFacadesHash;\nclass UserController extends Controller\n{\n    \/\/ \n\n    function index(Request $request)\n    {\n        $user= User::where('email', $request-&gt;email)-&gt;first();\n        \/\/ print_r($data);\n            if (!$user || !Hash::check($request-&gt;password, $user-&gt;password)) {\n                return response([\n                    'message' =&gt; ['These credentials do not match our records.']\n                ], 404);\n            }\n        \n             $token = $user-&gt;createToken('my-app-token')-&gt;plainTextToken;\n        \n            $response = [\n                'user' =&gt; $user,\n                'token' =&gt; $token\n            ];\n        \n             return response($response, 201);\n    }\n}<\/code><\/pre>\n<p>Antes que voc\u00ea possa testar a autentica\u00e7\u00e3o, crie um usu\u00e1rio empregando seeders. O comando a seguir cria um arquivo <strong>UsersTableSeeder<\/strong>.<\/p>\n<pre><code class=\"language-bash\">php artisan make:seeder UsersTableSeeder<\/code><\/pre>\n<p>Dentro do arquivo <strong>database\/seeders\/UsersTableSeeder.php<\/strong>, substitua o c\u00f3digo existente pelo c\u00f3digo a seguir para propagar o usu\u00e1rio:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace DatabaseSeeders;\n\nuse IlluminateDatabaseSeeder;\nuse IlluminateSupportFacadesDB;\nuse IlluminateSupportFacadesHash;\n\nclass UsersTableSeeder extends Seeder\n{\n    \/**\n     * Run the database seeds.\n     *\n     * @return void\n     *\/\n    public function run()\n    {\n        DB::table('users')-&gt;insert([\n            'name' =&gt; 'John Doe',\n            'email' =&gt; 'john@doe.com',\n            'password' =&gt; Hash::make('password')\n        ]);\n    }\n}<\/code><\/pre>\n<p>Agora execute o seeder usando este comando:<\/p>\n<pre><code class=\"language-bash\">php artisan db:seed --class=UsersTableSeeder<\/code><\/pre>\n<p>A \u00faltima etapa que falta no fluxo de autentica\u00e7\u00e3o \u00e9 usar o middleware criado para proteger a rota. Navegue at\u00e9 o arquivo <strong>routes\/api.php<\/strong> e adicione a rota de produtos dentro do middleware.<\/p>\n<pre><code class=\"language-php\">use AppHttpControllersUserController;\n\nRoute::group(['middleware' =&gt; 'auth:sanctum'], function () {\n    Route::apiResource('products', ProductController::class);\n});\n\nRoute::post(\"login\",[UserController::class,'index']);<\/code><\/pre>\n<p>Depois de adicionar uma rota ao middleware, voc\u00ea receber\u00e1 um erro interno do servidor se tentar buscar os produtos.<\/p>\n<figure style=\"width: 1044px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/internal-server-error.png\" alt=\"Um erro interno do servidor ap\u00f3s adicionar uma rota.\" width=\"1044\" height=\"644\"><figcaption class=\"wp-caption-text\">Um erro interno do servidor ap\u00f3s adicionar uma rota.<\/figcaption><\/figure>\n<p>Mas quando voc\u00ea fizer login, obtiver um token e us\u00e1-lo no cabe\u00e7alho, ele autenticar\u00e1 voc\u00ea e come\u00e7ar\u00e1 a funcionar. Voc\u00ea pode enviar uma solicita\u00e7\u00e3o POST para <a href=\"http:\/\/127.0.0.1:8000\/api\/login\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/127.0.0.1:8000\/api\/login<\/a> com o seguinte corpo:<\/p>\n<pre><code class=\"language-php\">{\n    \"email\":\"john@doe.com\",\n    \"password\":\"password\"\n}<\/code><\/pre>\n<figure style=\"width: 574px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/authentication-bearer-token.png\" alt=\"Autentica\u00e7\u00e3o bem-sucedida.\" width=\"574\" height=\"675\"><figcaption class=\"wp-caption-text\">Autentica\u00e7\u00e3o bem-sucedida.<\/figcaption><\/figure>\n<p>Use o token recebido como um token bearer e o adicione como cabe\u00e7alho de autoriza\u00e7\u00e3o.<\/p>\n<figure style=\"width: 941px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/add-bearer-token.png\" alt=\"Adicionando o token bearer como cabe\u00e7alho de autoriza\u00e7\u00e3o.\" width=\"941\" height=\"858\"><figcaption class=\"wp-caption-text\">Adicionando o token bearer como cabe\u00e7alho de autoriza\u00e7\u00e3o.<\/figcaption><\/figure>\n<h2>Como lidar com erros de API<\/h2>\n<p>Sempre que voc\u00ea envia uma solicita\u00e7\u00e3o ao servidor, ele responde. Com a resposta, ele tamb\u00e9m envia um <a href=\"https:\/\/kinsta.com\/pt\/blog\/lista-codigos-status-http\/\">c\u00f3digo de status<\/a> de acordo com a natureza da resposta. Por exemplo, um c\u00f3digo de status 200 indica que a solicita\u00e7\u00e3o foi bem-sucedida, e um <a href=\"https:\/\/kinsta.com\/pt\/blog\/corrigir-o-erro-404-pagina-nao-encontrada\/\">404<\/a> sugere que o servidor n\u00e3o consegue encontrar o recurso solicitado.<\/p>\n<p>No entanto, um c\u00f3digo de status n\u00e3o \u00e9 suficiente. Voc\u00ea precisa de uma mensagem de erro leg\u00edvel por humanos. O Laravel oferece muitas maneiras de lidar com erros. Voc\u00ea pode usar um bloco try-catch, o m\u00e9todo fallback ou enviar uma resposta personalizada. O c\u00f3digo a seguir que voc\u00ea adicionou ao site <code>UserController<\/code> demonstra isso.<\/p>\n<pre><code class=\"language-php\">if (!$user || !Hash::check($request-&gt;password, $user-&gt;password)) {\n    return response([\n        'message' =&gt; ['These credentials do not match our records.']\n    ], 404);\n}<\/code><\/pre>\n\n<h2>Resumo<\/h2>\n<p>O Eloquent Model do Laravel facilita a cria\u00e7\u00e3o, a valida\u00e7\u00e3o e o teste de APIs. Seu mapeamento objeto-relacional oferece uma abordagem direta para interagir com o banco de dados.<\/p>\n<p>Al\u00e9m disso, atuando como middleware, o token Sanctum do Laravel pode ajudar voc\u00ea a proteger suas APIs rapidamente.<\/p>\n<p>E se voc\u00ea precisar de mais otimiza\u00e7\u00e3o, a solu\u00e7\u00e3o de <a href=\"https:\/\/sevalla.com\/database-hosting\/\">hospedagem de banco de dados<\/a> da Kinsta simplifica a configura\u00e7\u00e3o e o gerenciamento de bancos de dados para todos os seus projetos da web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Laravel Eloquent \u00e9 uma maneira f\u00e1cil de interagir com seu banco de dados. \u00c9 um mapeador objeto-relacional (ORM) que simplifica as complexidades dos bancos de &#8230;<\/p>\n","protected":false},"author":199,"featured_media":59598,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[951,984],"class_list":["post-59597","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>API do Laravel: Criando e Testando uma API no Laravel - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Saiba como realizar testes de APIs criando um modelo que voc\u00ea pode usar para construir a API no Laravel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"API do Laravel: Criando e Testando uma API no Laravel\" \/>\n<meta property=\"og:description\" content=\"Saiba como realizar testes de APIs criando um modelo que voc\u00ea pode usar para construir a API no Laravel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-19T11:24:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-24T06:08:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"3042\" \/>\n\t<meta property=\"og:image:height\" content=\"1521\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Saiba como realizar testes de APIs criando um modelo que voc\u00ea pode usar para construir a API no Laravel.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"API do Laravel: Criando e Testando uma API no Laravel\",\"datePublished\":\"2023-10-19T11:24:56+00:00\",\"dateModified\":\"2023-10-24T06:08:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/\"},\"wordCount\":1276,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/\",\"name\":\"API do Laravel: Criando e Testando uma API no Laravel - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg\",\"datePublished\":\"2023-10-19T11:24:56+00:00\",\"dateModified\":\"2023-10-24T06:08:17+00:00\",\"description\":\"Saiba como realizar testes de APIs criando um modelo que voc\u00ea pode usar para construir a API no Laravel.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"API do Laravel: Criando e Testando uma API no Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"API do Laravel: Criando e Testando uma API no Laravel - Kinsta\u00ae","description":"Saiba como realizar testes de APIs criando um modelo que voc\u00ea pode usar para construir a API no Laravel.","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:\/\/kinsta.com\/pt\/blog\/laravel-api\/","og_locale":"pt_PT","og_type":"article","og_title":"API do Laravel: Criando e Testando uma API no Laravel","og_description":"Saiba como realizar testes de APIs criando um modelo que voc\u00ea pode usar para construir a API no Laravel.","og_url":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-10-19T11:24:56+00:00","article_modified_time":"2023-10-24T06:08:17+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Saiba como realizar testes de APIs criando um modelo que voc\u00ea pode usar para construir a API no Laravel.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tempo estimado de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"API do Laravel: Criando e Testando uma API no Laravel","datePublished":"2023-10-19T11:24:56+00:00","dateModified":"2023-10-24T06:08:17+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/"},"wordCount":1276,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/","url":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/","name":"API do Laravel: Criando e Testando uma API no Laravel - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg","datePublished":"2023-10-19T11:24:56+00:00","dateModified":"2023-10-24T06:08:17+00:00","description":"Saiba como realizar testes de APIs criando um modelo que voc\u00ea pode usar para construir a API no Laravel.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/laravel-api\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-api-2.jpg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/pt\/topicos\/laravel\/"},{"@type":"ListItem","position":3,"name":"API do Laravel: Criando e Testando uma API no Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=59597"}],"version-history":[{"count":10,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59597\/revisions"}],"predecessor-version":[{"id":64257,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59597\/revisions\/64257"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59597\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/59598"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=59597"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=59597"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=59597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}