2011-05-06 70 views
1

我们正在考虑如何为其他系统设计接口。接口设计/ API设计:通用方法与特定方法

我的同事希望实现一个通用接口(例如doIt(JSONArray)),您可以在JSONObject中放置想要的信息,以便呼叫例如是这样的: doIt('{"method":"getInformation", "id":"1234", "detailLevel": "2"}') doIt('{"method":"getEmployeeInfo", "EmployeeId":"4567", "company": "Acme Inc."}')

(我用“和‘在这个例子只是为了演示的目的,我知道我不得不逃离。’在实际系统中)。 这种方法则是通过HTTP accessable,这样我想http://mysite/doIt?parm={JSONObject}

我的方法是使用不同的接口与它们各自的参数,这样,我想有一个getInformation(1234,2)getEmployeeInfo(4567,"Acme Inc.")接口。因此,通过http访问我的计划如下所示:http://mysite/getInformation?id=1234&detailLevel=2http://mysite/getEmployeeInfo?employeeId=4567&company=acmeinc.

对于访问我们服务的客户,我们希望提供封装bevahiour的特殊库。例如。会有一个客户机Java-lib的这转化一个客户调用getEmployeeInfo(..)要么

http://mysite/doIt?parm={'{"method":"getEmployeeInfo", "EmployeeId":"4567", "company": "Acme Inc."}'} 

http://mysite/getEmployeeInfo?employeeId=4567&company=acmeinc. 

,然后返回结果。

因此,对于客户端来说,如果后端使用处理“翻译”的库,后端将如何工作。

您认为每个想法的优缺点是什么?我更喜欢我的方法,因为它看起来更“干净”。但这只是一种难以争辩的感觉。也许你可以给我(或他)关于设计的一些想法,也可以触摸区域(可伸缩性,安全性...)或提供有关此事宜的有用链接

回答

0

JSON解决方案可能会更好,因为您可以发送复杂对象更容易

但是,这只是一个小的语法细节,让老板选择(或做一个投票),并建立你的软件。

+0

,因为它的工作原理,它是面向未来的老板只要不关心;) – codie4711 2011-05-06 10:18:12

1

我可能会投票支持JSON解决方案,即使它们或多或少是等价的。 (这两个易于扩展,标准的,面向未来的解决方案。)

选购JSON的原因:

  • 有不同的平台,帮助您建立正确的对象,不同的库过多,请检查字符串数据有效等。

  • 将JSON数据解组到对象中。某些库(例如Gson)可以自动编组并将JSON解组为对象。让您免于编写自己的代码,并且可以使用经过其他人测试的代码。

  • 支持新接口。假设你将你的传输方法改为套接字,ftp(!)或其他。您仍然可以使用另一个传输将JSON对象发送给您的后端。

+0

好,但是,如果API应该从不同的客户端(例如使用JavaScript的Web浏览器)。难道你不认为先构建一个JSON对象并将其发送到服务器会更“困难”吗?在另一种情况下,您只需在url/post请求中输入值(这并不是那么大的区别..我知道)。 – codie4711 2011-05-06 15:18:44

+0

或者您无法真正拥有此版本的RESTful访问权限(我的RESTful也不是RESTful,但你可以想像......像http:// mycomp/employee/2345/acmeinc(但我真的没有看到这方面的优势... – codie4711 2011-05-06 15:28:56

+0

JSON是JavaScript Object Notation的缩写,所以你肯定不会遇到问题javascript网页浏览器;) 不,不难建立一个JSON对象。 – uvesten 2011-05-06 15:56:12