Page 1 sur 1

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

Posté : 29 juin 2020, 15:07
par kevin254kl
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

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

Posté : 29 juin 2020, 17:58
par @rthur
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.

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

Posté : 30 juin 2020, 07:36
par kevin254kl
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

Posté : 02 juil. 2020, 09:31
par kevin254kl
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 :)