Jai un backend api .net pour les applications mobiles et la question sest posée (en conversation avec le développeur iOS) si une réponse JSON pour un GUID vide doit renvoyer:
- 00000000-0000-0000-0000-000000000000
- ou null (en ayant le type de retour Nullable Guid type (Guid?)
Si le premier, le développeur mobile doit créer une méthode danalyse pour cela et ne pas utiliser sa fonction de vérification générique standard.
En C #, vous feriez simplement
if (guid == Guid.Empty)
Mais le développeur iOS parle de créer une méthode danalyse (donc pas intégrée je suppose).
Mais je ne trouve aucune discussion sur ce qui est considéré comme « meilleure pratique » ou même sur la façon dont les applications natives traitent les Guid vides / nuls.
Je sais ce que jaime faire mais que pensez-vous que je devrais faire?
Commentaires
- Premièrement, ce quil fait ‘ sil ‘ nest pas un GUID vide? Aussi, pourquoi a-t-il besoin dune méthode danalyse pour un GUID vide mais pas non vide? ‘ peut-il simplement faire un contrôle dégalité par rapport à la chaîne » 00000000-0000-0000-0000-000000000000 « ?
- Le Guid vide est différent du Guid non existant. Bien sûr, la convention de vide sur .Net est 00 …. 00, mais vous ne voudrez peut-être pas divulguer cette convention à une API publique que ‘ est utilisée par dautres plates-formes. Au lieu dessayer de définir ce que ‘ est vide et ce que ‘ nest pas, vous devez définir le sens davoir et de ne pas avoir de Guid , utilisez une convention qui serait facile pour toutes les plateformes (web, IOS, Android, etc …) et gardez-la comme protocole.
- @Machado et bien est-ce une convention .net? » L » nil » UUID, un cas particulier, est lUUID » en.wikipedia.org/wiki/Universally_unique_identifier#Standards
- Je suppose que .Net na que Guid .Empty car dans la version 1.0 il ny avait pas de génériques ni de Nullable < T >, donc Empty est devenu un stand pour signifier null, puisque Guid est un type valeur, mais ce nest pas réellement une valeur guid valide. Dans la base de code dans laquelle je travaille aujourdhui, pour une raison quelconque, il y a des Guid partout, et Empty et Null signifient sémantiquement la même chose. Cest assez ennuyeux, et je ‘ ai rendu le Guid ‘ non nullable donc je ne ‘ Je dois continuer à vérifier les deux cas, mais cela ‘ est uniquement parce quil existe ‘ maintenant un moyen de se débarrasser de Guid .Empty.
- Il y a ‘ une différence importante entre un » vide » constant et nul: lun entraînera des NRE et lautre gagné ‘ t. Les deux doivent être vérifiés et manipulés, alors choisissez votre poison. Voulez-vous échouer rapidement ou en silence?
Réponse
Un guid « vide » est toujours un guid valide , donc son analyse ne devrait pas nécessiter de logique supplémentaire.
La question est de savoir pourquoi lutilisez-vous? Cela me semble être une erreur dattribuer une signification particulière à un guid particulier, ce qui en fait une magie nombre.
Cest un peu comme dire que je « retournerai un identifiant int, mais sil est négatif, cest un code derreur. Ne le faites pas!
.. La raison étant que dans chaque appel à votre fonction, lutilisateur devra se rappeler de vérifier une valeur de retour négative. Sils oublient, un désastre se produit.
De même, si vous attribuez à guid.empty une signification particulière, tous ceux qui appellent votre API doivent écrire un chèque spécial après chaque appel.
Il » Il vaut mieux renvoyer null (le cas échéant) ou lancer une exception (via un code derreur HTTP, en supposant un service REST).
Commentaires
- car un jour, vous aurez un code davertissement, ou une erreur 504.2 et ne pourrez pas le presser dans un entier négatif, ou un id négatif et tout le système seffondrera
- cest un peu un côté question vraiment. guid.empty (comme tout autre guid spécifique) ne sera jamais généré
- OP didn ‘ t attribuer une signification particulière à 00..00, léquipe .Net la fait. La question est de savoir sil faut ou non laisser cette abstraction fuir.
- @RubberDuck: le Nil UUID fait en fait partie du RFC qui décrit lUUID donc labstraction a déjà » fuite « . ref tools.ietf.org/html/rfc4122#section-4.1.7
- Eh bien @Newtopian si elle fait partie de la RFC ‘, alors je trouve tout à fait acceptable de la renvoyer dans une réponse API. Si le ‘ langue / bibliothèque du client ne ‘ t définit une constante pour celui-ci, il ‘ est assez simple pour en créer un et le gérer de manière appropriée.
Réponse
Je suis un développeur iOS et Je nai aucune idée de la raison pour laquelle votre gars pense quil a besoin de créer « une méthode danalyse. » UUID(uuidString: valueFromServer)
est tout ce dont il a besoin. Il peut créer votre UUID magique simplement:
extension UUID { static var zero: UUID { return UUID(uuidString: "00000000-0000-0000-0000-000000000000")! } }
Ensuite, il peut comparer nimporte quel GUID à ce GUID magique.
Cela dit, pour toutes les valeurs provenant du serveur, le développeur frontend doit dabord vérifiez si la valeur est là, puis vérifiez si elle est bien formée (du bon type.) Si vous renvoyez une valeur magique, alors il doit également vérifier si le la valeur correctement tapée est magique. En incluant la valeur magique, vous lobligez à faire une vérification if supplémentaire.
En tant que développeur frontend, je dois demander: pour quelle raison mobligez-vous à augmenter la complexité de mon application?
Si vous pouvez faire valoir que linterface doit traiter un GUID manquant différemment du GUID magique, alors vous avez un argument pour le renvoyer. Sinon, vous ajoutez une complexité inutile à lapplication frontend.
(Ajout en réponse au commentaire de @RubberDuck.)
Voici le problème. La norme JSON a une manière de traiter les valeurs nulles et la norme GUID a une manière différente de traiter les valeurs nulles. Puisque vous envoyez un GUID via JSON , ce dernier est la préoccupation globale (car le GUID est encapsulé dans JSON), cest la norme à laquelle vous devez vous conformer. Parce que même si vous décidez denvoyer un GUID nul en envoyant en fait un GUID plein de zéros, linterface doit toujours vérifier la valeur JSON null.
Ne forcez pas le frontal à traiter deux concepts différents de null.
Commentaires
- Parce quil ‘ fait partie de la RFC? tools.ietf.org/html/rfc4122#section-4.1.7
- Oh, les joies de la complexité accidentelle. Je dois rendre mon application plus complexe car un comité RFC a fait un choix qui na aucun sens dans mon système.
- Non, vous rendez votre application plus complexe alors que votre système devienne plus flexible en acceptant un standard bien défini. De plus, si vos bibliothèques ne supportent pas nativement le standard, vous augmentez une odeur et leur demandez de le corriger en amont. ‘ / li>
- Ou vous obtenez la norme modifiée parce que ‘ est stupide. Les valeurs magiques sont les pires. Et ensuite, un RFC qui dit une valeur int de 0 est en fait NULL ?
Réponse
Faites ce que vous aimez (en ce qui concerne MacOS et iOS).
Le développement iOS ou MacOS r écrira une méthode danalyse qui vérifie si vos données JSON contiennent une chaîne et la transforme en objet GUID ou indique dune manière ou dune autre un échec. Si vous envoyez une valeur null JSON pour indiquer un GUID non existant, ils vérifieront également si les données JSON contiennent une valeur NSNull (). Cela suppose que le développeur nest pas totalement incompétent. En outre, en fonction de leurs préférences, ils utiliseront des GUID facultatifs et vérifieront nil, ou des GUID non facultatifs et auront une propriété qui vérifie si un GUID est composé de zéros. Cest totalement indépendant de ce que vous faites.
Donc, sérieusement, vous pouvez faire ce que vous voulez (gardez-le simplement cohérent). Tout développeur pas totalement incompétent sera très bien. « Créer une méthode danalyse » est quelque chose qui se fait très facilement. En tant que développeur iOS, cela ne vaut même pas la peine dêtre discuté. Documentez ce que vous envoyez. Je vais créer une méthode danalyse plus rapidement que ne le prendrait notre discussion.
Commentaires
- Oui je suis daccord avec vous, je contrôle ce qui doit être fait, et je le ferai. Et je sais que le développeur iOS créera un analyseur en un tournemain. Mais est-ce la bonne réponse? Jespérais une réponse plus solide .. mais peut-être quil y a ´ t one. Je ´ je vais laisser cela mariner pendant un petit moment et ensuite vous donner la réponse, rien de mieux ne vient.
Réponse
Étant donné que dans .NET Guid est un type valeur, il ne peut pas recevoir la valeur null.
Si nous avons besoin de stocker des valeurs nulles dans des types valeur la solution normale est dutiliser Nullable ou en raccourci utiliser la syntaxe? comme dans Guid? int? long? etc.
Cela fonctionnera également avec les sérialiseurs standard, donc la valeur sera soit manquante, soit aura le littéral valeur nulle.
Commentaires
- Esben, cette réponse ne concerne pas OP iv id = « bb05b8f341 « La question de
. Veuillez lexaminer plus en détail avant de répondre.