当前位置:网站首页>How to design an interface?
How to design an interface?
2022-07-05 12:16:00 【Xujunsheng】
How to design an interface ?
Preface
Interfaces are essential to our system , It can be called the cornerstone of the system . I think a good interface needs to have the following aspects : Security 、 stability 、 Efficiency 、 Maintainability 、 Readability . Now let's discuss what issues need to be considered in designing a good interface according to these properties ?
Security
Security is of great importance to interfaces . Our common Web Vulnerabilities include :SQL Inject 、JSON Deserialization vulnerability 、XSS attack 、CSRF attack 、 File upload and download vulnerability 、DDoS attack 、 Weak password 、 Certificate Validation 、 The internal interface is exposed in the public network 、 Unauthorized access related vulnerabilities .
Preventive measures :
- data validation : Use filters 、 The interceptor verifies the input data ;
- Identity Authentication & session management : Use token protection for interfaces of important operations ;
- Secure storage : Using encryption algorithms :MD5、SHA256、3DES;
- IP White list 、 Log the interface request 、 Desensitization of sensitive data, etc .
stability
Interface stability includes two aspects: one is robust, the other is reliable , These two concepts are easy to confuse .
Robustness,
Robustness refers to the ability of an interface to handle errors .
It is reflected in several aspects : Interface current limiting 、 Downgrade 、 Interface response timeout processing 、 Retry and early warning mechanism .
Current limiting
Current limiting , Also known as flow control (Rate Limit). It means that the system is facing high concurrency , Or in the case of large traffic requests , Only specified events are allowed to enter , The excess will be denied service 、 To line up or wait for 、 Demotion, etc , So as to ensure the stability of the interface .
Common current limiting algorithms : Fixed window current limiting algorithm ( Counter )、 Sliding window current limiting algorithm 、 Leaky bucket algorithm 、 Token bucket algorithm .
For space reasons, I will not explain here , Let's open a separate chapter to introduce in detail .
Interface response timeout processing
This is often the case when interfacing with third-party interfaces , Because of unstable factors such as network
.
In this case, we can take : Set timeout 、 Interface retry mechanism 、 asynchronous 、 Early warning and other schemes .
And we can pass it :System Default mode 、StopWatch、AutoCloseable To count the response time of the interface , In order to monitor it .
reliability
Reliability design can mainly consider : idempotent 、 There are two aspects of transaction consistency .
Idempotency
Idempotent means that the execution result of any number of requests has the same impact as that of one request .
To put it bluntly, query operation will not affect the data itself no matter how many times it is queried , So the query itself is idempotent . But new operations , The database changes with each execution , So it's not idempotent .
There are many ways to solve idempotent problems , such as :
- insert before select
- Add pessimism lock :select … for update
- Lock in optimism : Add a... To the list timestamp perhaps version Field
- Add unique index
- Build a weight watch
- Add distribution lock :redis、zookeeper
Transaction consistency
A transaction is a set of ungroupable operations , These operations are either successful , Or cancel the execution .
Four characteristics of transactions (ACID): Atomicity 、 Uniformity 、 Isolation, 、 persistence .
The single database does not involve network interaction , Therefore, it is relatively simple to implement transactions between multiple tables (Spring Affairs are easily solved ), This kind of transaction is called local transaction .
When the performance of a single database reaches the bottleneck, it needs to carry out database and table separation and service-oriented transformation .
Distributed transaction is the participant of transaction 、 Servers that support transactions 、 Resource servers and transaction managers are located on different nodes of different distributed systems .
Single database transactions can easily meet the requirements of transactions ACID Four features , Provide strong consistency assurance , But distributed transactions should fully follow ACID Features can be difficult .
In order to pursue high availability and high throughput of distributed systems , The solution of distributed transaction generally provides final consistency .
Distributed transactions
We call transactions that provide ultimate consistency as flexible transactions , Flexible transactions generally follow the rules in the distributed domain BASE theory :
- BA:Basic Availability, Basic business availability .
- S:Soft state, The state of flexibility .
- E:Eventual consistency, Final consistency .
There are three scenarios for distributed transactions :
- Distributed transactions across databases
- Cross service distributed transactions
- Hybrid distributed transaction
Common distributed transaction solutions :
- XA Two-phase commit
- TCC Pattern : Support TCC The open source frameworks for transactions are :ByteTCC、Himly、TCC-transaction.
- Saga
- Message based distributed transaction : Scheme based on transaction message 、 Local message based solutions
- Distributed transaction middleware :Seata
Efficiency
We can use multithreading to make full and rational use of system resources , Using cache can improve response speed 、
The implementation of multithreading is inseparable from two classes :Thread、Runnable.
At the same time, we can also use Future and Callable Get the execution result of the child thread .
Using thread pools, you can manage and reuse threads , Reduce the context switching and other problems caused by frequent thread creation .
When it comes to multithreading, we have to talk about thread safety .
Thread safety problem
Two scenarios of thread safety :
- Data contention : Write two data at the same time , The data of one party is either discarded or written incorrectly ;
- Competitive conditions : Execution order , For example, to read the contents of a file , Then naturally, after this document is written , Suppose the threads don't work well , I'll read it before you finish writing , This will cause errors in order .
Thread safety issues only occur in multithreaded environments , Single thread serial execution does not have this problem .
Ensure thread safety in high concurrency scenarios , There are four dimensions to consider :
- Data is visible in a single thread , such as ThreadLocal;
- Read only objects ,final
- Thread safety class :StringBuffer、ConcurrentHashMap
- Synchronization and lock mechanism :synchronized、Lock etc. .
You should also pay attention to deadlock in multithreaded scenarios .
Maintainability
Maintainability can also be called extensibility . This requires a good design of the interface at the design level .
Reflected in the response results 、 exception handling 、 The printing of logs should be under unified control .
Another is that you can use design patterns .
Design patterns 23 Kind of , Most commonly used, such as : The singleton pattern 、 The proxy pattern 、 Factory mode 、 Builder pattern 、 Template pattern 、 Strategy model, etc .
Spring Many design patterns are used in the source code , If you are interested, you can learn something about .
Readability
Readability is to provide convenience for future generations , It's the so-called iron camp, flowing soldiers .
When we write interfaces, we might as well add more comments to complex logic , This is not only convenient for others to read , Also bring yourself traversal .
边栏推荐
- Pytorch weight decay and dropout
- vscode快捷键
- Matlab boundarymask function (find the boundary of the divided area)
- [untitled]
- MySQL data table operation DDL & data type
- Riddle 1
- Select drop-down box realizes three-level linkage of provinces and cities in China
- 报错ModuleNotFoundError: No module named ‘cv2.aruco‘
- Mmclassification training custom data
- Just a coincidence? The mysterious technology of apple ios16 is actually the same as that of Chinese enterprises five years ago!
猜你喜欢
HiEngine:可媲美本地的云原生内存数据库引擎
Learn the memory management of JVM 02 - memory allocation of JVM
Tabbar configuration at the bottom of wechat applet
Matlab superpixels function (2D super pixel over segmentation of image)
Hiengine: comparable to the local cloud native memory database engine
Seven ways to achieve vertical centering
July Huaqing learning-1
调查显示传统数据安全工具在60%情况下无法抵御勒索软件攻击
Pytorch MLP
The evolution of mobile cross platform technology
随机推荐
Basic operations of MySQL data table, addition, deletion and modification & DML
想问问,如何选择券商?在线开户是很安全么?
byte2String、string2Byte
Differences between IPv6 and IPv4 three departments including the office of network information technology promote IPv6 scale deployment
Codeworks 5 questions per day (1700 average) - day 5
POJ-2499 Binary Tree
MySQL storage engine
[HDU 2096] 小明A+B
POJ-2499 Binary Tree
Just a coincidence? The mysterious technology of apple ios16 is actually the same as that of Chinese enterprises five years ago!
【load dataset】
Multi table operation - Auto Association query
Halcon template matching actual code (I)
Yolov5 target detection neural network -- calculation principle of loss function
codeforces每日5题(均1700)-第五天
Use and install RkNN toolkit Lite2 on itop-3568 development board NPU
互联网公司实习岗位选择与简易版职业发展规划
JS for循环 循环次数异常
Application of a class of identities (vandermond convolution and hypergeometric functions)
16 channel water lamp experiment based on Proteus (assembly language)