2 votes

comment puis-je utiliser guzzlehttp pour créer un Hub (API centralisée) ?

Je suis en train de créer une API pour différents sites web. Mais avant de transmettre la demande au site web, elle passera par le serveur de couche intermédiaire, c'est-à-dire le serveur central, puis le serveur central transmettra la demande au site web correspondant. Toutes les demandes iront au serveur central, puis le serveur central communiquera avec les sites respectifs et les données de la demande seront transmises telles quelles. Tous les sites Web sont développés sur php laravel, l'architecture est presque la même. J'ai trouvé Guzzlehttp pour le traitement des demandes, s'il y a une autre façon de répondre à l'exigence, s'il vous plaît laissez-moi savoir,

aussi pour le routage laravel je dois appeler la même fonction pour toutes les routes. Actuellement, j'ai les routes suivantes

Route::get('users', 'QuestsController@getUsers');
Route::post('lists', 'QuestsController@postLists');
Route::post('add-user', 'QuestsController@postAddUser');
Route::post('update-status', 'QuestsController@postUpdateStatus');
Route::post('delete', 'QuestsController@postDelete');

au lieu d'appeler différentes méthodes du contrôleur, je veux appeler la même méthode pour toutes les routes comme dans l'exemple suivant

Route::get('users', 'QuestsController@central');
Route::get('add-user', 'QuestsController@central');
Route::post('delete', 'QuestsController@central');

Veuillez m'aider à trouver une solution.

Merci beaucoup.

1voto

Daan Meijer Points 874

En supposant que vous vouliez un moyen de "goulot d'étranglement" pour toutes les demandes dans une méthode de contrôleur, vous pouvez faire quelque chose comme ceci :

Route::get('{url}', 'QuestsController@centralGet')->where('url', '.*');
Route::post('{url}', 'QuestsController@centralPost')->where('url', '.*');

Vous avez maintenant deux méthodes de contrôleur qui prennent toutes deux un paramètre (supplémentaire), que vous pouvez utiliser pour identifier la réponse correcte. Les méthodes du contrôleur ressembleraient à quelque chose comme :

public function centralGet($url, Request $request){
    ...
}

public function centralPost($url, Request $request){
    ...
}

0voto

Je pense qu'en plus vous pourriez vouloir utiliser la passerelle API https://www.nginx.com/blog/building-microservices-using-an-api-gateway/ . Comme Daan l'a écrit, vous avez besoin d'une route qui résoudra tous les services par un seul point d'entrée.

Vous pouvez ensuite construire un résolveur de service et récupérer les données du service concerné. Vous pouvez également mettre en cache la réponse ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X