[RESOLU] Api rest plusieurs PUT vs 1 PUT pour mise à jour de champs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Api rest plusieurs PUT vs 1 PUT pour mise à jour de champs

Re: Api rest plusieurs PUT vs 1 PUT pour mise à jour de champs

par kevin254kl » 02 juil. 2020, 09:31

Finalement je parts sur une structure avec une seul route qui sera plus DRY et REST, également ça facilitera la vie du front à moi de faire une bonne architecture pour que le code ne soit pas fat :)

Re: Api rest plusieurs PUT vs 1 PUT pour mise à jour de champs

par kevin254kl » 30 juin 2020, 07:36

Merci @rthur :),

Plus de précision:
Dans le système actuel la web app fonctionne par carte bootstrap qu'on sauvegarde, le soucis est que je me dis si le système de carte change alors la route devra changer ou les paramètres qui la compose pour éviter l'incohérence. Par contre si j'ai une seul route puisque les paramètres sont souvent optionnels je dois faire attention à bien découper car je dois vérifier (permissions, paramètres ...).
Dans ce cas là tu serais tout de même parti sur un découpage en plusieurs routes s'il te plaît?

Merci

Re: Api rest plusieurs PUT vs 1 PUT pour mise à jour de champs

par @rthur » 29 juin 2020, 17:58

Je pense que ça dépend de l'usage de ceux qui vont consommer ton API.
Si dans la majorité des cas ils ont plusieurs champs à mettre à jour simultanément, alors il est préférable de tout regrouper en 1 appel plutôt qu'ils soient obligés de faire 2 ou 3 appels à la suite.

Api rest plusieurs PUT vs 1 PUT pour mise à jour de champs

par kevin254kl » 29 juin 2020, 15:07

Bonjour à tous,

Besoin d'un conseil, je travaille actuellement sur des apit rest ou j'ai ces endpoints, avec une permission par pour sso, modules...

Code : Tout sélectionner

/products/id/sso /products/id/status /products/id/security
Cela fonctionne très bien, mais d'après vous vaut-il mieux pour la best practice vaut-il mieux regrouper l'enssemble dans une route /products/id en PUT?

Code : Tout sélectionner

/** * Change value of sso for solution if solution use sso * @Route("/api/products/{id}/sso", methods={"PUT"}, defaults={"permission_needed": ROLE::PERMISSION_SECURITY_WRITE}) * @param Security $security * @return JsonResponse */ public function editSso(Security $security, Request $request, string $id) { // add better param validation $ssoEnabled = json_decode($request->getContent(), true)['ssoEnabled'] ?? null; $product = $this->em->getRepository(Product::class)->findOneBy(["productId" => $id]); if (!$product) { throw new NotFoundHttpException(sprintf("The product with %s not found", $id)); } if (!is_bool($ssoEnabled)) { throw new InvalidParameterException(sprintf("sso attribut is not valid %s", $ssoEnabled)); } $product->setSsoEnabled($ssoEnabled); $this->em->persist($product); $this->em->flush(); return new JsonResponse([ 'success' => sprintf("sso updated", $ssoEnabled) ], Response::HTTP_OK); } /** * update status * @Route("/api/products/{id}/status", methods={"PUT"}, defaults={"permission_needed": ROLE::PERMISSION_CONTRACT_WRITE}) * @param Security $security * @return JsonResponse */ public function updateStatus(Request $request, string $id) { $status = (bool)json_decode($request->getContent(), true)['status']; $product = $this->em->getRepository(Product::class)->findOneBy(["productId" => $id]); if (!$product) { throw new NotFoundHttpException(sprintf("The product with %s not found", $id)); } $product->setIsActive($status); $this->em->persist($product); $this->em->flush(); return new JsonResponse( ['success' => "product status updated"], Response::HTTP_OK ); }
Merci de votre aide