HTML5 使在移动 Web 上完成许多非常酷的事情变得容易,但有一件事仍然相当困难,那就是处理照片。Android 自 3.0 版本以来就支持通过文件 API 访问设备摄像头,而 iOS 则在去年秋季的 iOS 6 中开放了这一功能。然而,允许用户在 HTML5 中拍摄和上传照片并不像将表单连接到数据库那样简单。由于设备、操作系统版本和浏览器的种类繁多,图像文件具有不同的方向、大小和不同的编码。
在开发 HTML5 应用程序时,我经常遇到这种令人头疼的问题,这促使我和我的合作伙伴创建了 Mobozi。Mobozi 是一个前端库,它优化和规范化跨移动设备、操作系统和浏览器的图像,同时也是一个用于照片上传和服务的简单 API。这篇文章简要概述了我们如何创建 API 以使其既功能强大,又易于开发人员使用且无需付出额外努力。
规划
我们首先做的就是绘制出我们需要的所有功能,并从用户的角度遍历不同的用例和流程。我们考虑了诸如格式和版本控制之类的事情,以及我们如何对其进行结构化以使其尽可能地对开发人员友好。
我们还考虑了数据格式,并决定支持 JSON、XML 和 JSONP,以便使 API 尽可能灵活。我们还确保以可预测的方式对 API 调用进行建模,并且不需要开发人员进行猜测。例如,要添加项目,始终使用 POST 方法,而要检索则使用 GET 方法。
安全性
接下来我们考虑安全性,这是任何面向公众的 API 中最重要的部分之一。我们决定从子域 (https://api.mobozi.com) 提供我们的 API,并且仅在此域上允许 CORS(跨域资源共享)(我们的主域和所有其他子域都不接受来自不同域的任何请求)。此外,Apache 上的 CORS 是一个非常棒的资源。
开发者体验
一旦确定了域的所有基本要素,我们就必须考虑开发人员如何实际访问和实现我们的 API。我们决定提供一个 API 密钥,并使用 HTTP 令牌身份验证来对他们进行身份验证。我们还花费大量时间完善我们的文档,并继续倾听反馈,以便使它们尽可能地精简。
技术
一旦我们确定了 API 需要提供的功能以及如何实现它,我们就必须选择一个堆栈来构建它。我们选择了 PHP/MySQL,因为它稳定、可扩展,最重要的是,我们的团队非常熟悉它。接下来,我们开始寻找一个框架,该框架可以使我们的 API 轻量级,同时也能为我们的用户提供非常快的响应时间。
在研究和测试了不同的 API 框架之后,我们找到了两个满足我们需求的框架 - Limonade 和 Slim。Limonade 是一个用于快速 Web 开发和原型设计的 PHP 微框架。Slim 也是一个 PHP 微框架,可以帮助您快速编写简单但功能强大的 Web 应用程序和 API。
我们最终选择了 Limonade,因为它更容易实现,并提供了我们需要的功能,例如干净的 URL 和跨域请求处理。Slim 也很强大且轻量级,但在跨域请求以及自动加载程序方面存在一些问题。
以下是我们 API 中的一个简短示例。此代码将允许您从任何设备上传图像,并获取其存储位置的 URL。
将此代码段包含在您页面的头部
mobozi.init('123456789');
function uploadImage(){
var myFile = document.getElementById('idimage').files[0];
var imageData = {
"file": myFile
};
mobozi.image.uploadGetUrl(imageData,function(response) {
if (response.status == 201){
$('#imgUrl').html('URL: ' + response.data.imageUrl);
$('#upImage').attr('src',response.data.imageUrl);
} else {
alert (response.error);
}
});
}
将此代码段包含在您页面的主体中
一个可运行的示例
一个可运行的示例 可在 jsFiddle 上获取。
推广
因此,功能已经确定,攻击计划已决定,代码也已编写;接下来是什么?让开发人员使用它!并希望获得他们关于如何改进它的反馈。这就是我们目前在 Mobozi 通过 举办黑客马拉松(为获胜者准备了很棒的高保真音箱)正在做的事情。更多详细信息请访问该页面,并随时向 founders@mobozi.com 提出任何问题。
关于 Nick Gottlieb
企业家、建造者、设计师、黑客、探险家、冲浪者、日语使用者。
关于 Robert Nyman [荣誉编辑]
技术布道师和 Mozilla Hacks 编辑。发表演讲和博客文章,内容涉及 HTML5、JavaScript 和开放 Web。Robert 是 HTML5 和开放 Web 的坚定支持者,自 1999 年以来一直从事 Web 前端开发工作 - 在瑞典和纽约市。他还经常在 http://robertnyman.com 上发表博客文章,并且喜欢旅行和结识新朋友。