Laravel 7 has brough us a super minimal HTTP client. I'm a big fan. If you are familair with the powerful Guzzle HTTP client, you may have found it a little unintuitive or overkill for most projects.
In this breif intro, I'll show you how awesomley minimal this HTTP client is, using the Docamatic API Docamatic API (disclaimer!!! - I am the founder).
Getting Started
Assuming you have a Laravel project up and running, the first thing you need to do is obtain your API key from the Docamatic dashboard. Once you have your API key, add it to your .env
file as follows:
DOCAMATIC_KEY=YOUR-API-KEY-HERE
Then, add the following to config/services.php
:
'docamatic' => [
'key' => env('DOCAMATIC_KEY')
]
Treat your API Key as a password — keep it secret. It should not be included in public repositories, emails or client side code
Making an API Request
For demonstration purposes, create a controller named DocumentController.php
as below. In a real world application you may want to use a Job that can be dispatched to a Queue or a Console Command that runs as a scheduled task.
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class DocumentController extends Controller
{
public function create()
{
// Send the request
$response = Http::withToken(config('services.docamatic.key'))->post('https://docamatic.com/api/v1/pdf', [
'source' => 'https://example.com'
]);
// Access the response data via json()
$data = $response->json();
// Dump out the data array
dd($data);
}
}
Error Handling
A nice benefit of using the Laravel HTTP client is that you no longer need to wrap your requests within a try/catch block. Laravel provides convenient methods that you can use to determine if anything went wrong with the request.
// Determine if the status code was >= 200 and < 300...
$response->successful();
// Determine if the response has a 400 level status code...
$response->clientError();
// Determine if the response has a 500 level status code...
$response->serverError();
Blade Template To PDF
Laravel's render method will return a view as a HTML string, which we can use to populate the source
parameter. As the Docamatic API doesnt have to look up an external URL, response times are usually quicker when sending raw HTML, opposed to a URL.
// Blade template to PDF
$response = Http::withToken(config('services.docamatic.key'))->post('https://docamatic.com/api/v1/pdf', [
'source' => view('documents.report')->render()
]);
Return PDF as Base64 String
You may want to return your document as a base64 string, to save to your own storage or a database. To do so, set the encode
parameter to true.
public function create()
{
// Return the PDF as base64 string
$response = Http::withToken(config('services.docamatic.key'))->post('https://docamatic.com/api/v1/pdf', [
'source' => 'https://example.com',
'encode' => true
]);
// Access the response data via json()
$data = $response->json();
// Save to storage
file_put_contents(storage_path('app/document.pdf'), base64_decode($data['document']));
}
Delete from Storage
To delete a document from storage simply post the transaction_id
of the document to be deleted.
// Delete a document from storage
$response = Http::withToken(config('services.docamatic.key'))->delete('https://docamatic.com/api/v1/delete', [
'transaction_id' => '8c9a4943-5c13-483f-b3e4-de711e5b7006'
]);
Top comments (0)