首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制客户端代码按预期/发布的方式使用API

如何强制客户端代码按预期/发布的方式使用API
EN

Stack Overflow用户
提问于 2014-06-16 19:43:33
回答 1查看 91关注 0票数 0

我想开发一个由第三方使用的API --在这里,我们对第三方将如何使用API没有太多的控制。通过公共文档交流使用API的正确方式并不能保证正确的API使用。

是否有任何技术或设计模式迫使API使用者按预期使用API方法?

下面是一个API的两个使用示例,它有一个方法来发布状态:

  • 使用#1使用者可以通过向该方法传递一个字符串数组,在一个调用中推特多个状态。这是API设计器的预期用途。
  • 使用#2使用者仍在time上发布多个状态,但一次只发布一种状态,最后调用tweet方法十次。这不是预期的用途,可能会导致性能问题。

我正在寻找一个解决方案来强制/防止这种API的使用。

包装/交付为jar的API:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-06-17 04:17:03

你应该相信你的客户,他们做了正确的事情。但也许你可以代替它们进行分批:

自己收集API.tweet中的请求。也许您可以聚合来自不同客户端的请求。也许您可以在较长的时间内聚合来自单个客户端的请求。

这应该能解决这个问题。如果没有,这里有更多的想法:

可能您可以很容易地发现,客户端连续多次调用您的方法,并抛出一个异常来教他们困难的方法。但是我会发现更好的方法是专门处理这样的客户端,例如,通过聚合它们的调用(而来自更符合标准的客户端的调用则会立即被传递)。

你写的

代码语言:javascript
复制
    // open db connection
    // insert/update
    // close db connection

这通常都是错误的。关闭连接意味着损失大量时间,连接池是标准的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24251024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档