这是我参与[第五届青训营]的第七天
gin框架中采用的路由是基于httprouter的
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "hello word")
})
r.POST("/xxxpost",getting)
r.PUT("/xxxput")
//监听端口默认为8080
r.Run(":8000")
}
gin支持Restful(Representational State Transfer 表现层状态转化)风格的API,使用URL定位资源,用HTTP描述操作。
在C++中,比较常用的网络框架有Crow、Oat++、Drogon。 Crow是受到Python Flask启发的微型web框架
- 简单的路由,类似于Flask
- 类型安全的处理方法
- 快速
- 快速的JSON解析器,可以使用json11或rapidjson以获得更好的速度或可读性。
- 基于Mustache的模板库
- 仅提供头文件
- 中间件和网络套接字支持
Oat++是轻量级且强大的零依赖web框架
- 可用于嵌入式设备上的REST API、微服务和高负载云应用的构建。大多数情况下用于物联网和机器人
- 可以便捷地移植到有线程和网络栈的地方
- 尽量使用简单API,在特定情况,如大量用户提供下载服务、流式传输到大量客户端、websocket服务器等可以使用异步API
Drogon是一个快速的跨平台网络框架
- 支持cookies和内建的session
- 支持后端渲染,把控制器生成的数据交给视图生成html页面,视图由CSP模板文件描述,
- 支持运行期的视图页面动态加载
- 基于非阻塞IO实现的异步数据库读写
- 轻量级ORM的实现
- 支持协程
/// The header file
#pragma once
#include <drogon/HttpController.h>
using namespace drogon;
namespace api
{
namespace v1
{
class User : public drogon::HttpController<User>
{
public:
METHOD_LIST_BEGIN
//use METHOD_ADD to add your custom processing function here;
METHOD_ADD(User::getInfo, "/{id}", Get); //path is /api/v1/User/{arg1}
METHOD_ADD(User::getDetailInfo, "/{id}/detailinfo", Get); //path is /api/v1/User/{arg1}/detailinfo
METHOD_ADD(User::newUser, "/{name}", Post); //path is /api/v1/User/{arg1}
METHOD_LIST_END
//your declaration of processing function maybe like this:
void getInfo(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, int userId) const;
void getDetailInfo(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, int userId) const;
void newUser(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, std::string &&userName);
public:
User()
{
LOG_DEBUG << "User constructor!";
}
};
} // namespace v1
} // namespace api
以上是通过HttpController类创建一个RESTful API的例子。