AvantRestfulPourquoi la spécification n'a - t - elle pas été maintenue
Nous savons tous qu'une bonne spécification est une garantie importante pour la maintenabilité du système,Mais presque tous les deux ou trois ans,Je vais devoir revenir sur les spécifications de l'interface.
PourquoirestfulLes spécifications sont difficiles à maintenir?Résumé,Les principales raisons en sont les suivantes::
Donc,,L'application des normes doit être garantie:
Les principes les plus élevés de la conception des interfaces:Idempotence
Le principe suprême de la conception de l'interface est de maintenir l'idémpotence autant que possible,Voir ici pour plus de détails.
HTTPVerbes
http Il y a plusieurs verbes ,Mais il suffit de se concentrer sur quatre:
Certains sont utilisés pour la simplicité, On va l'utiliser. PUT Ça marche aussi. POST, Ce n'est pas un problème non plus. ,Il n'y a pas besoin de trop s'emmêler.
HTTPCode d'état
FréquentHTTP Les codes d'état sont les suivants: :
On devrait essayer d'utiliserHTTPCode d'état pour distinguer le type d'exception d'interface,Si vous voulez définir votre propre type,Il faut utiliser1000 Et plus tard .
Pas dans la valeur de retour,Contient à nouveau le type d'exception,La valeur de retour de l'interface n'est que les données elles - mêmes.
Spécification de nommage du routage
D'abord, quelques règles simples:
Par exemple:
Il y a beaucoup de discussions en ligne restfulLa question de savoir si la spécification est au singulier ou au pluriel,Je ne pense pas qu'il soit nécessaire de trop s'attarder sur ce point.
S'il s'agit d'une action sur une seule ressource, Peut être utilisé id Directement dans le routage ,Format comme:
/Nom de la ressource/{Ressourcesid}/{Action}
Comme vous pouvez le voir directement à partir du routage,C'est ce qu'on fait aux ressources.
En plus,Le premier nom de la route comme nom du module,InFastAPIImplémenté comme sous - routage(Module).
Spécification d'entrée / sortie
Les données de sortie suivent FastAPISpécifications de base:
Par exemple:
class PaddingArgs(BaseModel): left: float = Field(0.0, title='La marge gauche de la page est vide', ge=0, lt=0.5, description='SiboxDerightLes coordonnées sont inférieures au produit de cette valeur et de la largeur, Filtrer ceci box') right: float = Field(0.0, title='La marge droite de la page est vide', ge=0, lt=0.5, description='SiboxDeleftLes coordonnées sont plus grandes que la largeur de la page moins le produit de cette valeur et de la largeur, Filtrer ceci box') top: float = Field(0.0, title='Zone vide à la limite supérieure de la page', ge=0, lt=0.5, description='SiboxDebottomLes coordonnées sont inférieures au produit de cette valeur et de la hauteur, Filtrer ceci box') bottom: float = Field(0.0, title='Zone vide à la limite inférieure de la page', ge=0, lt=0.5, description='SiboxDetopLes coordonnées sont supérieures à la hauteur moins le produit de cette valeur et de la hauteur, Filtrer ceci box')
Les types de dictionnaires ne sont généralement pas utilisés directement dans les entrées / sorties,Au lieu de cela, il devrait être converti en une structure comme celle - ci.Si dans les paramètres d'entrée,Cette définition devient un objet.
FastAPI Table des matières
FastAPI Structure du Répertoire des projets pour :
. ├── app │ ├── __init__.py │ ├── readme.md # Description de l'interface document │ ├── main.py # Fichier d'entrée principal │ ├── schema.py # Généralitésschema │ ├── settings.py # Profil │ ├── dependencies.py # │ ├── exceptions.py # Corrélation anormale │ ├── utile.py # Fonctions générales de l'outil │ ├── common # Module commun │ │ ├── __init__.py │ └── module_name # Répertoire des modules,Chaque module est séparé dans un répertoire │ ├── __init__.py │ ├── router.py # Fichier de routage du module │ └── schema.py # Configuration du fichier de routage ├── .vscode # vscodeConfiguration │ ├── settings.json ├── .gitignore ├── README.md # Description du projet document ├── install.md # Installer la documentation de déploiement et d'exploitation et d'entretien ├── Dockerfile # Docker ├── requirements.txt # Paquet de dépendances du projet
À propos de la structure du Répertoire des projets,Après, on aura unFastAPI Spécification des échafaudages ,Voici le répertoire des modules,Nous incluons les modules eux - mêmes dans le répertoire des modules, Inclure les fichiers de routage (Certaines personnes aiment gérer les fichiers de routage dans un répertoire unifié,Mais je pense que les répertoires de modules sont étroitement couplés à d'autres répertoires).
Plus tard, nous pourrons développer et partager quelques modules, Par exemple, module utilisateur , Module de code de vérification, etc. ,Il suffit de placer le répertoire des modules dansappSous la table des matières,Puis à l'entrée globalemain.pyIl suffit d'enregistrer le routage approprié. Autres informations sur le Web:
Cet article est partagé par Wechat public Number - SauvageAIArchitecte(Moon-CV) ,Auteur:La luneAI
La source originale et les informations reproduites sont détaillées dans le texte,En cas d'infraction,Veuillez contacter: [email protected] Supprimer.
Date de publication originale: 2021-06-11
Participation à cet articleTencent Cloud Self - media Sharing Plan,Bienvenue à la lecture,Partager ensemble.