restful 接口设计
最近在工作中需要实现一个跨平台,易实现,方便调试排错的接口。 经过考虑之后,发现restful接口是非常合适的。
接口的实现是基于c++的boost的。所以有两个非常重要的boost库需要介绍一下。
首先我们需要想想我们需要怎样的借口调用方式,健壮的,易扩展的。
RequestHandler requesthandler;
requesthandler.set_handler("sessions")
.get(boost::bind(&handle_sessions_get_method, _1, _2))
.post(boost::bind(&handle_sessions_post_method, _1, _2, boost::ref(vm)))
.put(boost::bind(&handle_sessions_put_method, _1, _2))
.del(boost::bind(&handle_sessions_delete_method, _1, _2));
我们在这个接口中注册请求处理函数,分别处理 get,post,put,delete请求。
Q1:为什么所有的method请求是连接在一起的? 我们需要保持source的唯一性,一个source只能被声明一次,
/* -> 表示 key->value 的数据结构 */
source: sessions
action: get ,post, put, del
callback: handle_sessions_*_method
++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++ | get -> handle_sessions_get_method |
| sessions | ---> | post -> handle_sessions_get_method |
+++++++++++++ | put -> handle_sessions_put_method |
| del -> handle_sessions_delete_method |
++++++++++++++++++++++++++++++++++++++++++++
整个的调用就是两个 key-> value 的形式
boost::functon
typedef std::function<void(response &, const request &)> served_req_handler;
boost::function 的boost提供的一个回调函数。