Aimeos Laravel – JsonAdm API postup instalace

Pokud budete chtít Aimeos ovládat z externí aplikace, pravděpodobně bude chtít využít komunikaci přes API (Application Programming Interface). Vzhledem k tomu, že Aimeos není definován jako stand-alone aplikace, není divu, že má kompletní API připravené.

https://aimeos.org/docs/latest/admin/jsonadm/

Jestli jste si Aimeos nainstalovali do vašeho Laravel projektu, popřípadě dle návodu jako kompletní Laravel projekt, musíte nejdřív nastavit API v Laravelu. Důvodem je nutná autorizace, kterou obstarává Laravel, nikoliv Aimeos.

Laravel Sanctum

Balíček Sanctum zajišťuje v Laravelu autorizaci pro mobilní aplikace, single-page aplikace, nebo Bearer token API. Tento token budeme potřebovat při jakémkoliv dotazu na Aimeos JsonAdm API.

Postup instalace

Nejdřív musíme pomocí Composeru nainstalovat Sanctum do vašeho Aimeosu.

composer require laravel/sanctum

Publikujeme konfigurační soubory Laravel Sanctum.

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

Spustíme migraci.

php artisan migrate

Modelu User musíme nastavit, aby používal trait třídu HasApiTokens.

// app/Models/User.php

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}

Tímto máme Laravel Sanctum nainstalovaný a je připraven k použití. Vytvoříme si tedy kontroler, který bude zpracovávat login API requesty. Kontroler nazveme ApiAuthController.php a vytvoříme ho Artisan příkazem:

php artisan make:controller ApiAuthController

Soubor ApiAuthController.php se vytvoří ve složce app/Http/Controllers. Soubor si otevřeme a vytvoříme metodu login().

// app/Http/Controllers/AuthController.php

use App\Models\User;
use Illuminate\Support\Facades\Auth;

public function login(Request $request)
{
if (!Auth::attempt($request->only('email', 'password'))) {
return response()->json([
'message' => 'Invalid login details'
           ], 401);
       }

$user = User::where('email', $request['email'])->firstOrFail();

$token = $user->createToken('auth_token')->plainTextToken;

return response()->json([
           'access_token' => $token,
           'token_type' => 'Bearer',
]);
}

Do souboru routes/api.php přidáme routu, na kterou budeme odesílat login request.

// routes/api.php
use Illuminate\Http\Request;
use App\Http\Controllers\ApiAuthController;

Route::post('/login', [ApiAuthController::class, 'login']);

Testování

Nyní si přihlášení přes API vyzkoušíme. Pro testování API requestů můžeme využít program Postman.
Pro přihlášení odešlete POST request na <vaše-url-doména>/api/login s přihlašovacími údaji ‚email‘ a ‚password‘ jako plain text.

Pokud je vše správně, vrátí se vám odpověď s Bearer tokenem, který poté využijete při dotazech na Aimeos API.

{
    "access_token": "12|gCK4vwOA187yuBidPCG9CyCX1rwUXHCOgSS3aFKC",
    "token_type": "Bearer"
}

Úprava Aimos JsonAdm API

Nyní už se umíme autorizovat přes API. Zíksáme Bearer token, který použijeme při requestech na Aimeos API. Musíme ale ještě Aimeosu říct, aby také využíval Sanctum pro autorizaci.

To uděláme tak, že upravíme routy pro JsonAdm API. Ty se nacházejí zde: \vendor\aimeos\aimeos-laravel\src\routes.php
Přibližně na řádku 64 začíná podmínka, která definuje routy pro JsonAdm API:

if( ( $conf = config( 'shop.routes.jsonadm', ['prefix' => 'admin/{site}/jsonadm', 'middleware' => ['web', 'auth']] ) ) !== false )

Zde pouze upravíte middleware, tak využíval authorizaci Sanctum:

if( ( $conf = config( 'shop.routes.jsonadm', ['prefix' => 'admin/{site}/jsonadm', 'middleware' => ['web', 'auth:sanctum']] ) ) !== false )

Testování JsonAdm API

Teď už můžeme vyzkoušet dotaz na Aimeos JsonAdm API. Pro autorizaci musíme využít získaný Bearer token. Jak má request vypadat si dohledáme v dokumentaci: https://aimeos.org/docs/latest/admin/jsonadm/

Pro ukázku, takto získáme informace o produktu ID:1

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka je chráněna pomocí reCAPTCHA a platí zásady ochrany osobních údajů a smluvní podmínky společnosti Google.