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提供的一个回调函数。