我想开发一个由第三方使用的API --在这里,我们对第三方将如何使用API没有太多的控制。通过公共文档交流使用API的正确方式并不能保证正确的API使用。
是否有任何技术或设计模式迫使API使用者按预期使用API方法?
下面是一个API的两个使用示例,它有一个方法来发布状态:
我正在寻找一个解决方案来强制/防止这种API的使用。
包装/交付为jar的API:
package com.api;
public class API {
public API() {
// TODO Auto-generated constructor stub
}
public void tweet(String [] statuses) {
// TODO - very expensive db call to store statuses
// open db connection
// insert/update
// close db connection
}
}客户端调用API:
package com;
import com.api.API;
public class Example {
public Example() {
// TODO Auto-generated constructor stub
}
private static void client() {
API api = new API();
// API Usage #1 - WAS Expected
String [] statuses1 = new String[10];
for (int i = 0; i < 10; i++) {
statuses1[i] = new String("[" + i + "] - statuses1");
}
// one call to process all 10 statuses -- RIGHT
api.tweet(statuses1);
// API Usage #2 - NOT Recommended
String [] statuses2 = new String[1];
for (int i = 0; i < 10; i++) {
statuses2[i] = new String("[" + i + "] - statuses2");
// ten calls to process all 10 statuses -- WRONG
api.tweet(statuses2);
}
}
}发布于 2014-06-17 04:17:03
你应该相信你的客户,他们做了正确的事情。但也许你可以代替它们进行分批:
自己收集API.tweet中的请求。也许您可以聚合来自不同客户端的请求。也许您可以在较长的时间内聚合来自单个客户端的请求。
这应该能解决这个问题。如果没有,这里有更多的想法:
可能您可以很容易地发现,客户端连续多次调用您的方法,并抛出一个异常来教他们困难的方法。但是我会发现更好的方法是专门处理这样的客户端,例如,通过聚合它们的调用(而来自更符合标准的客户端的调用则会立即被传递)。
你写的
// open db connection
// insert/update
// close db connection这通常都是错误的。关闭连接意味着损失大量时间,连接池是标准的解决方案。
https://stackoverflow.com/questions/24251024
复制相似问题