当前位置:网站首页>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.
边栏推荐
- 一文搞懂Go语言中文件的读写与创建
- QT writing the Internet of things management platform 38- multiple database support
- hash 表的概念及应用
- Win11无法将值写入注册表项如何解决?
- Cdga | six principles that data governance has to adhere to
- go笔记(3)Go语言fmt包的用法
- 精选综述 | 用于白内障分级/分类的机器学习技术
- Flet tutorial 05 outlinedbutton basic introduction (tutorial includes source code)
- Stack: how to realize the judgment of valid brackets?
- 奏响青春的乐章
猜你喜欢
Flet tutorial 04 basic introduction to filledtonalbutton (tutorial includes source code)
What if the computer page cannot be full screen? The solution of win11 page cannot be full screen
看腾讯大老如何做接口自动化测试
Automatic generation of interface automatic test cases by actual operation
电脑怎么保存网页到桌面上使用
测试员的算法面试题-找众数
NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]
太方便了,钉钉上就可完成代码发布审批啦!
What if the WiFi of win11 system always drops? Solution of WiFi total drop in win11 system
Practice examples to understand JS strong cache negotiation cache
随机推荐
[in-depth learning] review pytoch's 19 loss functions
Oracle database, numbers Force 2 decimal places to display-Alibaba Cloud
Practice examples to understand JS strong cache negotiation cache
Lingyun going to sea | 10 jump &huawei cloud: jointly help Africa's inclusive financial services
电脑页面不能全屏怎么办?Win11页面不能全屏的解决方法
接口设计时的一些建议
idea大小写快捷键
企业数字化转型最佳实践案例:基于云的数字化平台系统安全措施简介与参考
电脑怎么保存网页到桌面上使用
阿里测试师用UI自动化测试实现元素定位
什么是区块哈希竞猜游戏系统开发?哈希竞猜游戏系统开发(案例成熟)
Browser render page pass
Play the music of youth
ICML 2022 | meta proposes a robust multi-objective Bayesian optimization method to effectively deal with input noise
Lingyun going to sea | Murong Technology & Huawei cloud: creating a model of financial SaaS solutions in Africa
From automation to digital twins, what can Tupo do?
Fleet tutorial 08 introduction to AppBar toolbar Basics (tutorial includes source code)
最长的可整合子数组的长度
node强缓存和协商缓存实战示例
BFC面试简述