我花了最后几个月与一个主要的健身品牌的API合作,并发现自己在一种Kafkaesque Nightmare中发现了自己。程序员喜欢挑战,良好的程序员拒绝被他们击败。我喜欢思考,我是一个非常好的程序员。所以虽然每天晚上我去睡觉败掉,我在我身上不会让我放弃,我用新的想法和新的驱动器醒来。我现在继续这样的几个月,就像一个梦想,日子和一天。任务很简单。获取数据。保存数据。但在这里,我被脆性代码包围,追逐虫子,我永远不会抓住。
所以,你如何建立一个技术障碍的API,这很高,你可以击败20年的退伍军人,直到这一刻一直找到一种方式。你如何慢慢地疯狂地开车,并从他所爱的职业推动所有的喜悦。好吧,我会告诉你的。
对于授权,我们将使用OAuth1a。当然,这是一个非常精细的标准,但签名请求将添加一个很好的少量复杂性,因此您从不完全确定它是导致请求失败的签名。
服务器到服务器通信。如果我们给您回电,而不是回复您的API请求。您要求某些数据,然后在现在和无限(或从不)之间的某个点,我们会回复。通常,响应将采取毫秒,但有时它将需要几分钟和罕见的时间。但是,最重要的是,如果我们没有任何数据,我们根本不会回复。不一致的是程序员的加密术。
这个设置在实践中的意思是什么?这意味着您需要在服务器或代理后面设置端点。如果没有回复,它也意味着在您的单元测试中,那么您将必须投入一些工作。写一些代码,测试它,如果失败,请检查WebServer日志。但是也许在您通过这些日志看的时候,请求通过,毕竟工作,才拍了一段时间。但当然,JSON没有以您的预期形式格式化,所以这么做。
重复数据禁止。这是一个多泽的。您只能恰好询问任何数据。不是一分钟,或一小时或一天 - 永远是一次。这种有效意味着没有单位测试是可重复的,而不用手注册新帐户并用数据填充它。让我们说在代码的实时和用户询问某个时间段的数据时,可以或可能不存在数据,或者可能会或可能不会收到该数据,但您仍然需要跟踪请求,因为如果您重叠在未来的某些时候只需一天,您将收到错误。当然,在生产请求失败时会发生什么?没有缓解,无所事事。这种数据是无可挽回的 - 永远。
我可以整天继续这一目标。但只是图片写了第一行代码。您成功执行它。然后,当你再次运行它时它不起作用。然后想象发生了其余的项目。
DEV和QA率限制。我想你可以争辩说可能有一些原因来设置QA率限制远低于生产。但是如何在每分钟100天(不需要)的100天内设置限制?这一个特别狡猾。首先,它为开发测试周期设置最大限制。写一些代码,运行测试。等待。但是,它真正有效的是,它补充了代码可能莫名其妙地失败的另一个原因。
但最好的部分是您正在尝试开发一个高度可扩展的应用程序,您如何开始使用任何载荷进行测试?好吧,简单的答案是您可以在生产中测试或根本没有测试。
产品中的应用级别限制。应用级别限制的美丽是您将需要一个消息队列。当然,可能还有其他技术,但如果它是一个Web应用程序,你不想有一堆长期的运行线程踢队列就是你唯一的赌注。
他们当然抛弃了其他事情,但这些人几乎不值得一提,因为他们只是典型的数据结构挑战或参数化选项差。那些是你的日常挑战,而不是那些将把最刺激的开发人员带到他们的膝盖上。
在过去的几个月里,我花了很少的时间,试图想象这支球队和他们的动机。无论您如何看待它,动机必须是防止使用API。也许,他们与一个系统交接有数十年的旧基础设施,越来越丝毫的干扰。也许他们有很多新的开发人员已经写了一些非常低效的代码,他们认为解决方案尽可能多地扔掉多少路块?或许他们只是不认识。也许当他们重量设计决策时,可用性被评为0,因此所有其他问题都是始终卓越的。
但是,我认为有另一种可能性。公司喜欢在健身空间中铺设花园,数据便携性是卖点。那么,你如何实现两者?你怎么靠近你的花园,但是每个人都到门?在这种情况下,这种发展噩梦是整个点。在这种情况下,唯一的傻瓜是认真且努力地尝试编写与之合作的代码。