当前位置:网站首页>Quelques suggestions pour la conception de l'interface
Quelques suggestions pour la conception de l'interface
2022-07-04 20:51:00 【Marathon】
Catalogue des articles
1. Vérification des paramètres
La validation des paramètres doit être obligatoire pour chaque interface,Qu'il s'agisse d'une demande initiale,Tout autre appel à l'arrière - plan doit vérifier les paramètres,Par exemple,:Longueur du paramètre、Type、Format,Si le paramètre requis est transmis,Conformité aux règles commerciales convenues, etc..
RecommandéSpringBoot Validation
Pour réaliser rapidement la vérification des paramètres de base.
Voir l'exemple suivant:
@Data
@ToString
public class DemoEntity {
// Ne peut pas être vide,Les espaces sont supprimés lors de la comparaison
@NotBlank(message = "Le nom ne peut pas être vide")
private String name;
// amount Doit être supérieur ou égal à 5,Jusqu'à10Nombre de
@DecimalMax(value = "10")
@DecimalMin(value = "5")
private BigDecimal amount;
// Doit être conforme àemailFormat
@Email
private String email;
// sizeLa longueur doit être5À10Entre
@Size(max = 10, min = 5)
private String size;
// ageLa taille doit être18À35Entre
@Min(value = 18)
@Max(value = 35)
private int age;
// userNon.null
@NotNull
private User user;
// La limite doit être décimale , Et entier integerLa plupart2Bits,DécimalefractionMax.4Bits
@Digits(integer = 2, fraction = 4)
private BigDecimal digits;
// La limite doit être une date future
@Future
private Date future;
// La limite doit être la date d'expiration
@Past
private Date past;
// La limite doit être un temps futur ou présent
@FutureOrPresent
private Date futureOrPast;
// Prise en charge des expressions régulières
@Pattern(regexp = "^\\d+$")
private String digit;
}
@RestController
@Slf4j
@RequestMapping("/valid")
public class TestValidController {
@RequestMapping("/demo1")
public String demo12(@Validated @RequestBody DemoEntity demoEntity) {
try {
return "SUCCESS";
} catch (Exception e) {
log.error(e.getMessage(), e);
return "FAIL";
}
}
}
2. Limite de courant d'interface
Lors de la conception de l'interface, Nous devrions évaluer la capacité de charge de l'interface , En particulier lorsqu'il est mis à la disposition de tiers , Ainsi, lorsque le débit réel demandé dépasse le débit prévu , Nous pouvons prendre des mesures préventives , Pour éviter que le serveur ne s'écrase .
En général, la limitation du courant est principalement destinée à prévenir la malice Dos Accès d'affaires anormal comme une attaque ou un crawler , Par conséquent, l'approche générale consiste à éliminer directement la partie qui dépasse le seuil. .
Il existe de nombreuses façons de limiter le courant , Version autonome disponible GuavaDeRateLimiter, Distribué disponible Redis+Lua, Pour une solution plus complète, vous pouvez utiliser le sentinel.
3. Dégradation de l'interface、Fusible、isolement
En cette ère de micro - services, , Une demande de fond peut passer plusieurs fois RPCProcédure invoquée, Par conséquent, la communication normale entre le service et le service est très importante. , Nous ne pouvons pas parce qu'un service n'est pas disponible , Fait que les noeuds de toute la liaison sont touchés , Lentement, l'ensemble du service n'est pas disponible , C'est ce qu'on appelle l'effet d'avalanche. .
SiBDéfaillance du Service,CauseAService àB Toutes les demandes de services n'ont pas été traitées en temps opportun , Le résultat final est A Toutes les connexions au service sont épuisées .
Tu sais quoi?, En fait, il doit y avoir un réseau entre nos services , Bien sûr, il y aura aussi d'autres liens qui ADemandes de services.
Par exemple, il y aCDemandes directesADe,Oui.DDemandeC,Et puisCDemande à nouveauADe,Oui.EDemandes directesADe,Donc une foisA Connexion épuisée ,Ce qui signifieC/D/E Et les connexions seront épuisées , C'est comme ça que ça roule. , En fin de compte, les ressources de connexion des noeuds dans tout le maillage sont épuisées .
Comme vous pouvez le voir,, L'impact des avalanches de service est très grave , Nous devons être prudents. , Et fusible 、 La rétrogradation est un moyen très efficace .
D'abord, nous devons échouer rapidement. , Réponse à la demande une fois le délai écoulé ,Il revient automatiquement, Demander au client de demander un délai ou autre ,En dernier analyse, Nous avons besoin d'une réponse rapide dans la mesure où le service est acceptable .
Les fusibles peuvent nous aider à répondre à des demandes qui ont expiré plusieurs fois , Donner quelques solutions , Comme ne plus demander dans un certain délai ,En plus de ça,, L'isolement des ressources est également possible ,Comme pourXAppel d'interface, Juste une allocation. MRessources( Les ressources ici se réfèrent généralement aux fils ).
Et la dégradation peut être interprétée comme Plan B, C'est - à - dire lorsque la réponse à la demande dépasse le seuil que vous avez fixé , Quel est votre plan de secours? , Que va - t - il se passer ensuite? ? La façon la plus simple de le faire est de donner une réponse amicale au client , Comme un service de dépannage , Tout en assurant un service stable , Peut également donner au client une bonne expérience .
Parmi euxnetlfixOpen SourcehystrixComponents,Ça peut être facile avecspring cloud Intégration écologique , Pour l'isolement des ressources 、Service fusible、 Il existe des solutions éprouvées pour la rétrogradation, etc. ,Peut essayer d'utiliser.
4. Retry Timeout
Utiliser le mécanisme de retry, Croyez - vous que la demande peut être acceptée? , Dans certains cas, l'échec d'une demande peut être simplement dû à l'instabilité du réseau. , Peut - être qu'il vaudrait mieux demander à nouveau. , À ce stade, il n'est pas préférable de retourner directement au client en cas d'échec. .
Il existe de nombreuses stratégies pour réessayer , Comme le nombre de retraits 、Fréquence, Lorsque le noeud cible est un déploiement groupé , Vous pouvez également utiliser le noeud de commutation pour réessayer, etc ,Par exemple,:Si demandéAÉchec du noeud, Passez automatiquement à la demande BNoeud.
Timeout retry peut être utilisé spring-retry
,C'estspringEncapsuléAPI, Diverses stratégies de retry peuvent être définies directement par annotation ,Mise en œuvre du mécanisme de retry.
netifixOpen Sourceribbon,Équilibrer la charge en tant que client, Le mécanisme de retry est également encapsulé ,Son rez - de - chaussée est également basé surspring-retry
Réalisé.
5. Idempotence
Maintenant qu'il y a un nouvel essai, il faut tenir compte de l'idémpotence ,Ce qu'on appelle l'idémpotence,En termes simples, Est d'exécuter plusieurs requêtes répétées sur une interface , Même résultat qu'une seule demande , Le concept semble très facile à comprendre , Mais pour vraiment maintenir cet objectif dans le système , C'est un design très rigoureux. .
Sauf pour réessayer. 、 Comme les notifications de rappel asynchrones 、MQ La conception de l'interface doit également garantir l'idémpotence , Ce n'est pas pour dire qu'il n'y a pas d'idéalisme sans ces conceptions. , Comme nous l'avons mentionné précédemment lors de l'examen , Le réseau lui - même a un mécanisme de retry ,Nous savons queTCPEst un Protocole de couche de transport fiable, Puisque vous voulez vous assurer que les paquets sont accessibles , Il doit y avoir un mécanisme pour réessayer. .
Il y a beaucoup de façons de garantir l'idémpotence ,Par exemple,:Verrouillage、Clé unique de la base de données、Machine d'état, etc..
6. Performance de l'interface
La performance est un sujet très vaste , Il n'y a pas d'expansion complète dans cet article , Mais il y a quelques directions , Après cela, le lecteur peut réfléchir profondément dans chaque direction .
6.1 Parallèle
Le parallélisme est la pleine utilisation CPU Une façon d'utiliser les ressources ,JDK Il y a aussi beaucoup de classes d'outils parallèles ,Par exemple,:CompletableFuture, S'il y a plus d'un lien de demande à la fois IODemande, Et ces demandes n'ont pas de dépendance séquentielle , Vous pouvez alors essayer le traitement parallèle .
Le parallélisme exige que nous contrôlions le parallélisme .
6.2 Asynchrone
Je crois en l'asynchrone. 、 Des concepts tels que la programmation réactive doivent également être bien connus , Asynchrone peut facilement obtenir un débit bien au - delà des demandes de synchronisation , Il existe de nombreux scénarios d'affaires qui sont particulièrement adaptés au traitement asynchrone , Par exemple, les notifications SMS après l'inscription d'un nouvel utilisateur 、Notification par courrier.
6.3 Cache
Mentionner l'amélioration des performances , Il doit y avoir beaucoup d'utilisation du cache , C'est en soi la conception de l'ordinateur qui décide .
Si vous avez une idée des retards d'accès à tous les niveaux , Vous pouvez prendre des mesures ciblées ,Comme dansCPUCache, Est le cache au niveau du système d'exploitation , En général, ce que nous pouvons contrôler, c'est le type d'accès , Les données dont nous avons besoin proviennent - elles du disque ou de la mémoire? , Ou une fois TCPDemande d'accès.
Bien sûr., Le cache est bon. , Mais il ne peut pas non plus être utilisé à mauvais escient. ,Après tout, les ressources sont limitées., La mémoire est beaucoup plus chère que le disque , Et le principe de la localisation de l'espace et du temps , Tu devrais tout savoir. , Si le taux de succès du cache n'est pas élevé , Ce serait contre - productif. .
6.4 Algorithmes
Nous disons que nous obtenons les mêmes résultats , Le processus de mise en œuvre peut varier ,O(n^2) La complexité temporelle de O(n)Même siO(logn) L'écart de complexité temporelle est encore évident , Cela n'est pas perceptible lorsque la quantité de données est faible , Mais une fois qu'il y a plus de données, , C'est évident. .
En plus de ça,, Il faut également tenir compte de l'utilisation de l'espace , Cela peut entraîner une fréquence élevée GC,Le résultat estCPUConsommation excessive, Même en fin de compte ,CauseOOM
7. Sécurité
Enfin, Il y a un autre sujet qui ne tourne pas rond. , C'est la sécurité de l'interface. , Si votre interface n'est utilisée que dans un réseau interne , Ne t'inquiète pas trop. , Mais si c'est une interface exposée au réseau public , Alors, il faut tenir compte de la sécurité .
Il y a beaucoup de choses à considérer pour la sécurité des interfaces ,C'est toujours pareil, Cet article ne peut que mentionner , Il n'y a aucun moyen de le faire un par un. .
7.1 Données sensibles
Les informations sensibles comprennent généralement: ,Carte d'identité、Numéro de téléphone portable、Numéro de carte bancaire、Plaque d'immatriculation、Nom, etc., Doit être traité conformément aux règles de désensibilisation .
7.2 Vulnérabilité
Contient généralement,CSRF、XSS、SQLInjection、Vulnérabilité de téléchargement de fichiers, etc.
CSRF
Demande de falsification inter - station(Anglais:Cross-site request forgery),Aussi appelé one-click attack Ou session riding,Généralement abrégé en CSRF Ou XSRF, Est une sorte de menace pour l'utilisateur actuellement connectéWebMéthodes d'attaque pour effectuer des opérations non intentionnelles sur une application.Suivi des scripts inter - sites(XSS)Comparé à,XSS Tirer parti de la confiance de l'utilisateur dans le site Web spécifié,CSRF Profitez de la confiance du site dans le navigateur Web de l'utilisateur.
XSS
Attaque de script inter - site (Cross Site Scripting, XSS) C'est arrivé au client,Peut être utilisé pour voler la vie privée、Fraude à la pêche、 Voler le mot de passe 、 Propagation d'attaques telles que le Code malveillant . Un attaquant malveillant place du Code nuisible au client sur le serveur en tant que contenu Web , Faire en sorte que d'autres utilisateurs du site regardent cette page , Ce code est injecté dans le navigateur de l'utilisateur pour l'exécution , L'utilisateur est attaqué .En général, Attaque avec script inter - site , Session cambriolable de l'attaquant Cookie Pour voler la vie privée des utilisateurs du site .
SQLInjection
SQLL'injection signifiewebL'application ne juge pas la légitimité des données saisies par l'utilisateur ou ne filtre pas strictement,Un attaquant peutwebAjouter un supplément à la fin de l'instruction de requête prédéfinie dans l'applicationSQLDéclarations,L'extraction et l'exécution de code malveillant sont effectuées du côté du navigateur,.Ceci permet de tromper le serveur de base de données pour effectuer des requêtes arbitraires non autorisées,Afin d'obtenir plus d'informations sur les données correspondantes.
Vulnérabilité de téléchargement de fichiers
Web Lorsque l'application traite le téléchargement de fichiers , Accepter le chemin et le nom de fichier spécifiés par l'utilisateur pour le téléchargement , Un attaquant exploite cette vulnérabilité pour télécharger d'autres fichiers du serveur, même des fichiers arbitraires (Code source、 La base de données passwd Attendez.).
7.3 Token、 Cryptage、Signature
Token Le mécanisme est principalement utilisé pour l'authentification , Dans les interfaces fournies à l'extérieur , Utilisé pour identifier le demandeur d'interface .
La signature peut être utilisée pour empêcher l'altération des données 、 .Le cryptage peut être utilisé pour empêcher les données d'être espionnées .
7.4 Noir、 Mécanisme de la liste blanche
L'utilisation du mécanisme de la liste blanche peut encore améliorer la sécurité de l'interface , Une fois que le service est disponible pour interagir avec le service , Le fournisseur d'interface peut limiter les IPPour accéder à, De cette façon, le demandeur d'interface n'a qu'à exporter IP C'est bon. .
Mécanisme de liste noire correspondant , Est l'interaction entre l'application et le client ,Parce que le clientIPTout n'est pas fixé, Le mécanisme de la liste blanche ne peut donc pas être utilisé , Mais nous pouvons encore utiliser la liste noire pour intercepter certaines demandes qui ont été identifiées comme illégales. IP.
边栏推荐
- hash 表的概念及应用
- Idea case shortcut
- 接口設計時的一些建議
- Selected review | machine learning technology for Cataract Classification / classification
- CDGA|数据治理不得不坚持的六个原则
- Play the music of youth
- NLP、视觉、芯片...AI重点方向发展几何?青源会展望报告发布[附下载]
- Every time I look at the interface documents of my colleagues, I get confused and have a lot of problems...
- So this is the BGP agreement
- 《动手学深度学习》(三) -- 卷积神经网络 CNN
猜你喜欢
How to adapt your games to different sizes of mobile screen
How does win11 search for wireless displays? Win11 method of finding wireless display device
How does the computer save web pages to the desktop for use
[in-depth learning] review pytoch's 19 loss functions
Flet tutorial 05 outlinedbutton basic introduction (tutorial includes source code)
What if the brightness of win11 is locked? Solution to win11 brightness locking
MySQL中的日期时间类型与格式化方式
Automatic generation of interface automatic test cases by actual operation
[Beijing Xunwei] i.mx6ull development board porting Debian file system
Flet教程之 08 AppBar工具栏基础入门(教程含源码)
随机推荐
#夏日挑战赛#带你玩转HarmonyOS多端钢琴演奏
Six stones programming: about code, there are six triumphs
What is involution?
强化学习-学习笔记2 | 价值学习
What if the win11 shared file cannot be opened? The solution of win11 shared file cannot be opened
idea插件
Flet tutorial 06 basic introduction to textbutton (tutorial includes source code)
黄金k线图中的三角形有几种?
左右最值最大差问题
MySQL statement execution details
Go language notes (2) some simple applications of go
Every time I look at the interface documents of my colleagues, I get confused and have a lot of problems...
How to solve the problem that win11 cannot write the value to the registry key?
Understand Alibaba cloud's secret weapon "dragon architecture" in the article "science popularization talent"
CDGA|数据治理不得不坚持的六个原则
Ten years' experience of byte test engineer directly hits the pain point of UI automation test
After inserting a picture into word, there is a blank line above the picture, and the layout changes after deletion
Dynamic memory management
什么是区块哈希竞猜游戏系统开发?哈希竞猜游戏系统开发(案例成熟)
企业数字化转型最佳实践案例:基于云的数字化平台系统安全措施简介与参考