2009-08-05 95 views
0

API接口,我们已经开发了图形招聘工作B2B门户网站,类似于相机准备艺术(www.camerareadyart.com)。它针对想要将位图转换为矢量图形,标志设计和像将黑白图像着色为彩色等一般图像处理的人员。易趣像一个门户网站

我们要添加的设施,让人们(我们的客户),可以使用一组我们提供给后从他们的网站工作的API直接而不必逐字访问我们的网站张贴他们的工作。

我从来没有做过这样的事,直到日期,所以我没有想法,我怎么能实现这样的事情。我也想知道我们如何实施安全措施,只有那些被授权的人才能发布他们的工作?

谁能给我的想法,我们如何才能做这样的事情。

回答

1

这个问题涉及一个非常大的面积,我怀疑任何一个单一的答案可以涵盖详细事宜。我能做的是根据我所犯的错误提供一些起点。

建立在自己的API基础上
不要将API功能添加到现有系统。这样做会:

  • 导致额外的测试负载(你必须来测试您的应用程序和独立的API)
  • 导致增加总体维护成本
  • 导致质量较差API比您想要提供的要多

您的总体目标应该是先构建API,然后在自己的API之上构建应用程序。这样做有以下好处:

  • API的测试本质上是同时的应用测试
  • 你会不会“忘记”添加任何所需的API方法

你的应用程式和执行应用程序逻辑(API)在逻辑上是分开的 - 在等式的每一方面以及它所负责的方面,它们之间将存在明确的分离。这将有助于指导发展。这也将使您可以非常轻松地将应用程序和API放在不同的机器上,并在需要时使用。

使用自己的API是一个很重要的一点。您的API的设计最初是次优的,只有通过自己使用它,您才能够以高效的方式向人们提供实际所需的功能。

你会最终有一个系统,它大致是这样的:

-------------       ------------- 
|   |       |   | 
| Your APP | <= HTTP communication => | Your API | 
|   |       |   | 
-------------       ------------- 

这凸显了一些进一步的好处:你可以与任何其他应用程序替换“你的APP”,让你的客户创造的应用程序,以用最适合他们的方式处理事情。您还可以在现有API之上创建新版本的应用程序 - 移至新版本的公共网站可能会更容易。

设计你的URL:映射类和方法
选择明智的网址是太大的问题,只要选择合理的类和方法名。从类及其方法派生URL是一种好方法。如果URL和类/方法之间没有明显的相关性,那么从长远来看,您会发现难以维护的事情。

我个人更喜欢的网址类和方法通过以下方式联系起来:

  • 地图类顶级目录
  • 映射方法顶级目录的子目录

例子:
你的API的网址https://api.camerareadyart.com
你有toColour()toBlackAndWhite()方法的image对象。

这可能映射到:

https://api.camerareadyart.com/image/toColour/ 
https://api.camerareadyart.com/image/toBlackAndWhite/ 

同样的位图矢量转换:

https://api.camerareadyart.com/bitmap/toVector/ 

设计反应
当有人被从数据或信息的数据,一个你网址,会发生什么?如何处理错误,如何处理例外?回答采取什么形式?

我不能告诉你该做什么。就我个人而言,我更喜欢将事物与HTTP紧密映射,然后在需要时才超越此范围。

例如,如果进入的请求被接受并且被处理,但遇到错误内部我会发出500个状态响应。同样,如果给定的API方法需要未提供的身份验证,则可能会发出403.利用现有的HTTP功能可以防止您重新创建某些内容。

使用HTTP
除了使用HTTP状态代码理智的现有的方面,一定要到处寻找一个仅HTTP滚动自己的解决方案之前,做一些方法。

希望用户可以指定是否响应格式应通过XML或JSON?使用HTTP Accept头。

想重新直接客户,以不同的URL抢请求的结果?使用HTTP位置标题。

有许多功能,HTTP已经处理,你可能想要做很多事情。使用它们!

安全
一般有两种问题在这里解决:对用户进行认证,并确定什么样的行动给定用户可以执行。

安全性:身份验证
用户需要在他们的请求中指定他们是谁。

首先想到的解决方案是允许用户指定用户名和密码,可能与用于访问您的应用的用户名和密码相同。表面看来这是一个好主意,但它并不理想。

用户最终将自己的用户名和密码烘焙到他们自己的应用程序中。不可避免地,一个用户会忘记他们的密码,并会改变它,以便他们可以愉快地访问您的应用程序,在此过程中打破他们自己的应用程序。

用户提供一个更好的选择是提供一个认证令牌,它基本上是一个用户唯一的唯一值,就像用户名和密码合并为一个一样。

这允许您在逻辑上将用户名和密码与访问API分开。用户可以随时更改自己的应用的用户名和/或密码,而不会中断他们对API的访问。

用户还可以拥有多个API令牌,每个令牌具有不同的访问级别,允许用户安全地将API令牌发送给第三方服务。

安全性:访问控制
至于外界关注的是,你的API是一组URL。根据定义,每个URL都是唯一的,并执行一项独特的任务。围绕这些概念设置访问控制机制是一个很好的起点。

我更愿意保留令牌允许访问的URL的每个令牌的列表。当使用给定的令牌访问URL时,告知访问哪个URL以及它是否位于令牌的允许的URL列表中是微不足道的。

如果您明智地选择了一组URL,其中每个URL执行一个独特的操作,此过程将为您提供关于您将获得的最佳级别的访问控制。

为了提供更精细的控制级别,您可能还需要指定每个允许访问令牌的URL,允许使用哪些查询参数。

+0

感谢您的回复。 这意味着我应该将API实现为Web服务。因为只有Web服务才能够公开API,并且用户只能通过它进行连接。 我是对的还是另一种方式? web serveice将如何提供。托管公司是否需要在服务器上进行任何更改? – 2009-08-10 04:32:07

0

您显然需要设计和运行您的后端Web服务。但是,所有其他功能(安全性,节流,OAuth密钥管理,订阅者门户,用于尝试API的交互式控制台等)都是一组相当标准的功能,您可能不应该自行开发这些功能。

市场上有商业API管理解决方案。我为拥有100%开源(Apache许可证)WSO2 API Manager的WSO2工作,您可以免费下载here或在WSO2 API Cloud中用作云托管版本。