Aidez-moi à régler une question interne.
Nous avons un point de terminaison que nous sommes tous d'accord devrait être un get, car tout ce qu'il fait est d'appeler un processus stocké et de retourner un ensemble de données. Cependant, il existe un ensemble de filtres que nous devons passer au point final. Vous trouverez ci-dessous un exemple de ce que les chiffres peuvent ressembler si toutes les options de filtrage sont passées:
{
"DistributorCode":"6065",
"Model":"123-xyz",
"Serial":"654654065",
"CurrentSMR":"11350.47",
"SoldbyDistributor":"",
"ServiceDistributor":"",
"LatestSMRDate":"02/12/2020",
"Coverage":"",
"Customer":"",
"CoverageExpirayDate":"",
"SortBy":{
"name" :"serial",
"order":"asc"
},
"select":["eh","wt","fc"]
}
Nous pourrions simplement passer à cette chaîne JSON en tant que paramètre QueryString dans l'appel de get, ou nous pourrions avoir chacun d'eux leur propre paramètre (bien que Sortby puisse devenir délicat).
Mais certains craignent que cela rendrait l'URL trop longtemps et nous risquerons de courir dans max query string length
les erreurs. Donc, ils veulent faire l'appel A POST à la place. Si c'était un POST Appel, il faudrait alors un objet dans le corps et au moins un paramètre QS (& code =) qui n'est pas négociable (il doit être là.)
Nous avons donc deux options (que je peux penser):
Faites-en un appel avec une URL potentiellement longue due aux paramètres.
1a) Chaque filtre est son propre paramètre
1b) La liste des filtres est une chaîne JSON de son propre paramètre
Faites-le un POST appel qui nécessite des paramètres QS et un objet JSON dans le corps
Que feriez-vous et pourquoi?
Merci!
Faites juste un get avec des paramètres normaux. Vous n'êtes nulle part près de la limite. Vous voudrez peut-être faire une petite fonction d'assistance qui peut prendre un objet arbitraire et la transformer en une chaîne de requête.
Le problème avec 1b il est difficile de déboguer (il suffit de changer un paramètre dans votre débogueur Web devient une corvée). Les journaux aussi seront masqués. Vous perdez la possibilité de filtrer le journal d'accès pour toutes les instances où le paramètrex = y, etc.
Le problème avec 2 est vous manque sur des caractéristiques utiles telles que la mise en cache, etc.
Mettez aussi avec le corps est un hardal Hack. Ne fais pas ça
Également en ce qui concerne le tableau dans votre exemple. Les chaînes de requête prennent en charge le même paramètre plusieurs fois pour que vous puissiez faire? SELECT = EH & SELECT = WT & SELECT = FC
Il suffit de faire un POST avec un corps. Vous avez un tableau sans bornes "select":["eh","wt","fc"]
qui va être une douleur à Serialise en tant que paramètres de chaîne de requête et peut éventuellement dépasser la restriction de la longueur de l'URL.
Je vous recommande également de supprimer votre SPROC, ayant une méthode plus simple qui a renvoyé plus d'objets et déplacer le filtrage sur le client.
Cela prendra chargement de la base de données et faire une interface utilisateur plus rapide
Vérifiez également CoverageExpirayDate
Dans ce cas, souvent les deux possibilités sont utilisées:
Vous ne devez transmettre que les paramètres de requête qui ne sont pas vides ou qui sont différents des valeurs par défaut.
Dans votre exemple, la chaîne de requête ne doit pas être trop longue. Donc, ici le point d'endurance Get est suffisant.