锁定老帖子 主题:10个类搞定无任何侵入的开放API服务
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (11)
|
|
---|---|
作者 | 正文 |
发表时间:2012-06-02
最后修改:2012-06-03
看到了http://www.iteye.com/topic/1121252, 以前也开发了个简单的开放api系统, 总共用了10个左右的类就可以搞定(使用spring mvc).现在把代码整理下发出. 2. 我们最重要的要求是:简单开发,简单使用, Service要写的干干净净,让开发API的coder在开发一个API的时候不用学习任何额外的东西, 而是在写一个普通的企业应用里面的Service(or Manager)代码, 下面就是开发一个API的步骤 1)定义API接口 package ws.service; import ws.annotation.HttpWebService; import ws.annotation.Path; import ws.service.impl.Hello; @HttpWebService public interface HelloService { @Path(value = "/heloWorld", paramNames = "name") Hello helloWorld2(String name); @Path(value = "/test") void test(); @Path(value = "/exception") void exception(); } 2.API实现 package ws.service.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import ws.service.HelloService; public class HelloServiceImpl implements HelloService { private static Log log = LogFactory.getLog(HelloServiceImpl.class); public HelloServiceImpl() { log.debug("Hello service init!!!"); } @Override public Hello helloWorld2(String name) { return new Hello(name); } @Override public void test() { log.debug("test"); } @Override public void exception() { if(1==1) { throw new RuntimeException("error"); } } } 3.Spring配置 <bean id="hello" class="ws.service.impl.HelloServiceImpl"/> 这样我们就已经定义了3个API了.分别是 /heloWorld ,/test ,/exception 下面看调用, 直接使用浏览器, 完整代码已经放在 https://github.com/jqq/rest 上面只是一个简单示例, 保证API的访问安全性代码问题稍后添加, 是实现方式添加interceptor. 1.授权校验 2.hmac校验(对称、非对称) 3.防重放攻击 4.超时控制 5.审计 实现方式参照 http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ 未完待续. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-06-03
https://github.com/jqq/rest 打不开
嫩这个题目真诱人 |
|
返回顶楼 | |
发表时间:2012-06-03
更新 删除数据如何操作?
|
|
返回顶楼 | |
发表时间:2012-06-04
最后修改:2012-06-04
godson_2003 写道 更新 删除数据如何操作?
更新操作一般是这样的: Server端: @Path(value="/update", paramNames = "hello") void update(Hello hello) ; @Override public void update(Hello hello) { //update log.debug(hello.toString()); } Client端调用方式为: http://localhost:8080/update.json?hello={name:2} server端自动解析domain参数,转换为Object. |
|
返回顶楼 | |
发表时间:2012-06-04
|
|
返回顶楼 | |
发表时间:2012-06-04
传统的webservice又笨重又难用,楼主这个看起来相当简洁明了,期待继续完善。
|
|
返回顶楼 | |
发表时间:2012-06-04
说说我的观点:
1. HelloService可以进一步拆成两个层次:api和service。拆分后自然就没有原先那么简洁了,但优点在于更灵活:service可以专注于业务逻辑,以service层作为业务逻辑的复用单元,内部代码和api层和ui都可以调用service层。 2. api层可以用java restful API做,譬如jersey 3. exception可以分内部的和外部的两类,内部exception包含了敏感信息不适合让客户端知道,应当转换成外部exception(譬如告诉客户端有internal error,再加个标识信息),而外部exception允许stacktrace。 |
|
返回顶楼 | |
发表时间:2012-06-04
还是需要json lib 搞序列化..
|
|
返回顶楼 | |
发表时间:2012-06-05
godson_2003 写道 更新 删除数据如何操作?
Of course you should use REST. |
|
返回顶楼 | |
发表时间:2012-06-05
guanlicome 写道 godson_2003 写道 更新 删除数据如何操作?
Of course you should use REST. 可能大家没有了解jqq的主要意义, 我也没有说的很清楚, jqq完成的功能和 http://www.iteye.com/topic/1121252 类似,只不过实现方式可能不一样, 大家也可以参看下 [url]http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ [/url] 总结下:就是用一个url请求实现业务逻辑,但是同时解决了验证身份,防网络篡改等安全功能. designing-a-secure-rest-api-without-oauth-authentication 我最近工作比较忙,会尽快把代码,文档整理出来... |
|
返回顶楼 | |