Maison >développement back-end >tutoriel php >Guide d'intégration SharpAPI Laravel
Bienvenue dans le Guide d'intégration SharpAPI Laravel ! Ce référentiel fournit un didacticiel complet, étape par étape, sur la façon d'intégrer SharpAPI dans votre prochaine application Laravel AI. Que vous cherchiez à améliorer votre application avec** des fonctionnalités basées sur l'IA** ou à automatiser les flux de travail, ce guide vous guidera tout au long du processus, de l'authentification à l'exécution d'appels API et à la gestion des réponses.
Article publié également sous forme de référentiel Github sur https://github.com/sharpapi/laravel-ai-integration-guide.
Avant de commencer, assurez-vous de remplir les conditions suivantes :
Si vous avez déjà un projet Laravel, vous pouvez ignorer cette étape. Sinon, suivez ces instructions pour créer un nouveau projet Laravel.
composer create-project --prefer-dist laravel/laravel laravel-ai-integration-guide
cd laravel-ai-integration-guide
php artisan serve
L'application sera accessible sur http://localhost:8000.
Pour interagir avec SharpAPI, vous devrez installer la bibliothèque client PHP SharpAPI.
Exiger le package SharpAPI via Composer
composer require sharpapi/sharpapi-laravel-client php artisan vendor:publish --tag=sharpapi-laravel-client
Le stockage d'informations sensibles telles que les clés API dans des variables d'environnement est une bonne pratique. Laravel utilise le fichier .env pour les configurations spécifiques à l'environnement.
Situé dans le répertoire racine de votre projet Laravel.
SHARP_API_KEY=your_actual_sharpapi_api_key_here
Remarque : Remplacez your_actual_sharpapi_api_key_here par votre clé API SharpAPI actuelle.
Laravel fournit la fonction d'assistance env pour accéder aux variables d'environnement.
$apiKey = env('SHARP_API_KEY');
Une authentification est requise pour interagir en toute sécurité avec les points de terminaison de SharpAPI.
Créez un service ou utilisez-le directement dans vos contrôleurs.
<?php namespace App\Services; use SharpAPI\SharpApiService; class SharpApiClient { protected $client; public function __construct() { $this->client = new SharpApiService(env('SHARP_API_KEY')); } public function getClient() { return $this->client; } }
Cela vous permet d'injecter le service partout où c'est nécessaire.
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Services\SharpApiClient; class AppServiceProvider extends ServiceProvider { public function register() { $this->app->singleton(SharpApiClient::class, function ($app) { return new SharpApiClient(); }); } public function boot() { // } }
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Services\SharpApiClient; class SharpApiController extends Controller { protected $sharpApi; public function __construct(SharpApiClient $sharpApi) { $this->sharpApi = $sharpApi->getClient(); } public function ping() { $response = $this->sharpApi->ping(); return response()->json($response); } }
Ajouter des routes à routes/web.php ou routes/api.php :
use App\Http\Controllers\SharpApiController; Route::get('/sharpapi/ping', [SharpApiController::class, 'ping']);
Une fois authentifié, vous pouvez commencer à effectuer des appels API vers différents points de terminaison SharpAPI. Vous trouverez ci-dessous des exemples d'interaction avec différents points de terminaison.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Services\SharpApiClient; use SharpAPI\Dto\JobDescriptionParameters; class SharpApiController extends Controller { protected $sharpApi; public function __construct(SharpApiClient $sharpApi) { $this->sharpApi = $sharpApi->getClient(); } public function generateJobDescription() { $jobDescriptionParams = new JobDescriptionParameters( "Software Engineer", "Tech Corp", "5 years", "Bachelor's Degree in Computer Science", "Full-time", [ "Develop software applications", "Collaborate with cross-functional teams", "Participate in agile development processes" ], [ "Proficiency in PHP and Laravel", "Experience with RESTful APIs", "Strong problem-solving skills" ], "USA", true, // isRemote true, // hasBenefits "Enthusiastic", "Category C driving license", "English" ); $statusUrl = $this->sharpApi->generateJobDescription($jobDescriptionParams); $resultJob = $this->sharpApi->fetchResults($statusUrl); return response()->json($resultJob->getResultJson()); } }
Route::get('/sharpapi/generate-job-description', [SharpApiController::class, 'generateJobDescription']);
Visitez http://localhost:8000/sharpapi/generate-job-description pour voir la description de poste générée.
Les réponses SharpAPI sont généralement encapsulées dans des objets de travail. Pour gérer ces réponses efficacement :
{ "id": "uuid", "type": "JobType", "status": "Completed", "result": { // Result data } }
Utilisez les méthodes fournies pour accéder aux données de résultat.
$resultJob = $this->sharpApi->fetchResults($statusUrl); $resultData = $resultJob->getResultObject(); // As a PHP object // or $resultJson = $resultJob->getResultJson(); // As a JSON string
public function generateJobDescription() { // ... (initialize and make API call) if ($resultJob->getStatus() === 'Completed') { $resultData = $resultJob->getResultObject(); // Process the result data as needed return response()->json($resultData); } else { return response()->json(['message' => 'Job not completed yet.'], 202); } }
Proper error handling ensures that your application can gracefully handle issues that arise during API interactions.
Wrap your API calls in try-catch blocks to handle exceptions.
public function generateJobDescription() { try { // ... (initialize and make API call) $resultJob = $this->sharpApi->fetchResults($statusUrl); return response()->json($resultJob->getResultJson()); } catch (\Exception $e) { return response()->json([ 'error' => 'An error occurred while generating the job description.', 'message' => $e->getMessage() ], 500); } }
Check the status of the job and handle different statuses accordingly.
if ($resultJob->getStatus() === 'Completed') { // Handle success } elseif ($resultJob->getStatus() === 'Failed') { // Handle failure $error = $resultJob->getResultObject()->error; return response()->json(['error' => $error], 400); } else { // Handle other statuses (e.g., Pending, In Progress) return response()->json(['message' => 'Job is still in progress.'], 202); }
Testing is crucial to ensure that your integration with SharpAPI works as expected.
Use Laravel's built-in testing tools to write unit tests for your SharpAPI integration.
<?php namespace Tests\Feature; use Tests\TestCase; use App\Services\SharpApiClient; use SharpAPI\Dto\JobDescriptionParameters; class SharpApiTest extends TestCase { protected $sharpApi; protected function setUp(): void { parent::setUp(); $this->sharpApi = new SharpApiClient(); } public function testPing() { $response = $this->sharpApi->ping(); $this->assertEquals('OK', $response['status']); } public function testGenerateJobDescription() { $jobDescriptionParams = new JobDescriptionParameters( "Backend Developer", "InnovateTech", "3 years", "Bachelor's Degree in Computer Science", "Full-time", ["Develop APIs", "Optimize database queries"], ["Proficiency in PHP and Laravel", "Experience with RESTful APIs"], "USA", true, true, "Professional", "Category B driving license", "English" ); $statusUrl = $this->sharpApi->generateJobDescription($jobDescriptionParams); $resultJob = $this->sharpApi->fetchResults($statusUrl); $this->assertEquals('Completed', $resultJob->getStatus()); $this->assertNotEmpty($resultJob->getResultObject()); } // Add more tests for other methods... }
Execute your tests using PHPUnit.
./vendor/bin/phpunit
For handling multiple API requests concurrently, consider implementing asynchronous processing using Laravel Queues.
Configure your queue driver in the .env file.
QUEUE_CONNECTION=database
Run the necessary migrations.
php artisan queue:table php artisan migrate
php artisan make:job ProcessSharpApiRequest
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use App\Services\SharpApiClient; use SharpAPI\Dto\JobDescriptionParameters; class ProcessSharpApiRequest implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $params; public function __construct(JobDescriptionParameters $params) { $this->params = $params; } public function handle(SharpApiClient $sharpApi) { $statusUrl = $sharpApi->generateJobDescription($this->params); $resultJob = $sharpApi->fetchResults($statusUrl); // Handle the result... } }
use App\Jobs\ProcessSharpApiRequest; public function generateJobDescriptionAsync() { $jobDescriptionParams = new JobDescriptionParameters( // ... parameters ); ProcessSharpApiRequest::dispatch($jobDescriptionParams); return response()->json(['message' => 'Job dispatched successfully.']); }
php artisan queue:work
To optimize performance and reduce redundant API calls, implement caching.
use Illuminate\Support\Facades\Cache; public function generateJobDescription() { $cacheKey = 'job_description_' . md5(json_encode($jobDescriptionParams)); $result = Cache::remember($cacheKey, 3600, function () use ($jobDescriptionParams) { $statusUrl = $this->sharpApi->generateJobDescription($jobDescriptionParams); $resultJob = $this->sharpApi->fetchResults($statusUrl); return $resultJob->getResultJson(); }); return response()->json(json_decode($result, true)); }
When the underlying data changes, ensure to invalidate the relevant cache.
Cache::forget('job_description_' . md5(json_encode($jobDescriptionParams)));
Integrating SharpAPI into your Laravel application unlocks a myriad of AI-powered functionalities, enhancing your application's capabilities and providing seamless workflow automation. This guide has walked you through the essential steps, from setting up authentication to making API calls and handling responses. With the examples and best practices provided, you're well-equipped to leverage SharpAPI's powerful features in your Laravel projects.
If you encounter any issues or have questions regarding the integration process, feel free to open an issue on the GitHub repository or contact our support team at contact@sharpapi.com.
This project is licensed under the MIT License.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!