web-dev-qa-db-fra.com

Est-il une pratique courante de valider les réponses des API tierces?

Je travaille sur un PHP qui dépend de quelques services tiers. Ces services sont bien documentés et fournis par des organisations assez grandes.

Je me sens paranoïaque lorsque vous travaillez avec des réponses de ces API, ce qui me conduit à écrire un code de validation qui valide que les réponses correspondent aux types de structure et de données spécifiés dans la documentation. Cela vient principalement du fait qu'il est hors de mon contrôle et si j'avais confiance aveuglément que les données seront correctes et que cela ne change peut-être pas la structure JSON par accident), cela pourrait entraîner un comportement inattendu dans ma demande.

Ma question est la suivante: Pensez-vous que cela est surkill? Comment tout le monde gère-t-il cette situation?

42
Darren Findlay

L'API de quelqu'un d'autre est votre interface externe. Vous ne devriez pas faire confiance aveuglément quelque chose qui traverse cette frontière. Vos futures debuggers vous remercieront de ne pas propager les erreurs de l'autre système dans les vôtres.

40
Ross Patterson

Votre API-Boundary est-elle également une limite de confiance?

Comme vous communiquez avec un système distant, c'est presque une certitude. Même si le système distant lui-même pourrait se faire confiance, le support pourrait ne pas être.

Échec de la vérification de succès et de manière constante toutes les données non approuvées peut entraîner un accident dans le meilleur des cas, à une prise de contrôle hostile silencieuse au pire.

Est-ce que l'API stable?

Même une API de confiance pourrait ne pas être stable, auquel cas une factualité extra-vérification est nécessaire et un plan de soutien, jusqu'à refuser le service jusqu'à ce qu'il soit fixé.

La mise en œuvre de l'API est-elle bien testée, mature et fiable?

Peu importe que l'API soit stable si la mise en œuvre n'abandonne pas à la hauteur.

Toujours rappelez-vous qu'il y a un compromis

Plus de tests signifient plus de code qui pourrait contenir des bugs et sera rarement si jamais exercé.

Ce code doit être écrit, maintenu et débogué, tout ce qui évite l'effort nécessaire ailleurs.

Également, tester de manière exhaustive le cas de défaillance est quelque part entre dur et impossible sans se moquer de l'API complète, laissant probablement un bug non découvert et accumuler davantage, même si plus lent que des commentaires.

Ainsi, certains API sont simplement invoqués au travail, tandis que d'autres sont (ou au moins doivent être) vérifiés sur chaque appel dans au moins une certaine mesure.

17
Deduplicator

Oui, mais dans la plupart des cas qui ne devraient pas être votre préoccupation personnelle.

Pour la plupart des langues, il existe des analyseurs qui analysent un JSON natif (ou quelle que soit votre langage de transfert) dans vos objets internes. Ils viennent avec toutes les options pour envisager différents styles d'écriture, comprendre des cas d'angle, des caractères d'échappement, des codages de caractères spéciaux, etc. Leur code de validation est utilisé par des milliers d'applications. Vous devez utiliser l'un de ces analyseurs si possible et s'appuyer sur leurs méthodes de validation au lieu de valider vous-même la syntaxe. C'est à dire. Ils devraient lancer des exceptions, renvoyer des codes d'erreur ou se plaindre autrement si l'entrée ne correspond pas à ce que vous avez spécifié (champs manquants, les chaînes ne correspondent pas à votre motif défini, etc.).

La seule validation que vous souhaiterez peut-être faire vous-même dans votre propre code est que la réponse est logique pour votre logique commerciale. N'essayez pas de réiliter l'autre service, il n'a aucun sens de valider pleinement que leur réponse est correcte: si vous pouvez le faire localement, vous n'avez pas besoin de les appeler. (Sauf si vous avez affaire à des problèmes totalement sensibles/des problèmes difficiles, vous pouvez appeler plusieurs services et combiner leurs résultats). Ce que vous pouvez faire lorsque vous souhaitez protéger contre un niveau extrême de catastrophes contre des réponses malveillantes consiste à détecter des réponses qui sont hors limites. C'est à dire. Bloquer une transaction dans votre service de location de vélo Si le projet de loi calculé à l'extérieur pour un seul client va au-delà de 1000 $ ou telle. Mais soyez prudent, on néglige facilement des caisses de coin qui sont valides (par exemple un client "virtuel" qui paie pour toute la location d'entreprise pendant une année).

3
Frank Hopkins

Votre validation ne devrait pas être restrictive. Il y a le modèle "lecteur tolérant". Cela signifie que vous devriez être aussi tolérant que possible lorsque vous consommez des données d'autres services. De l'autre côté, il y a le modèle "Writer" magnanime ". Ensemble, ils aident à produire des systèmes de communication plus robustes.

Par exemple, dans une interface basée sur JSON, vous devez probablement autoriser des propriétés inconnues. Cela permet à l'autre côté d'ajouter de nouvelles propriétés sans casser votre côté.

3
user355880