在"21、一个cgi的c++封装"中,我们封装了cgi,在这之上,我们可以再来封装一个webapi的framework。当然,前文的Casablanca是个不错的选择,但是它比较庞大,而且缺少一些业务上需要的功能。

Web API应用架构设计分析(1) - 伍华聪 - 博客园
http://www.cnblogs.com/wuhuacong/p/4614875.html

面向对象的WebAPI框架XXL-HEX - 许雪里 - 博客园
http://www.cnblogs.com/xuxueli/p/5003305.htm

webapi的设计关键点总结:
1、controller、requst、response、handler等常规的面向对象原则
2、数据的进出要能方便的进行序列化和加解密处理
3、handler在处理时,支持分层和分处理器,做到支持aop和处理器重用
4、支持处理链的配置化,来实现分流和ABTest

具体系统的api处理流程:
1、初始化framework,注册chain_handler、register_request_rewriter、register_url_mapping
2、客户端发起请求,根据url_mapping找到对应chain_handler
3、根据chain_handler对应的request_rewriter,对请求进行一定的预处理,包括根据配置文件使用不同的chain来实现分流和ABTest
4、根据预处理得到的chain name,从chain_factory取到对应的chain,chain包含一系列processor和renderer
5、按顺序执行processor,processor里可以动态的call_next_processor,来实现wrapper功能
6、处理完成后,调用不同renderer来实现序列化成json等功能,返回给客户端

后端程序员之路 23、一个c++的api framework的更多相关文章

  1. 后端程序员之路 28、一个轻量级HTTP Server的实现

    提到http server,一般用到的都是Apache和nginx这样的成熟软件,但是,有的情况下,我们也许也会用一些非常轻量级的http server.http server的c++轻量级实现里,M ...

  2. 后端程序员之路 39、一个Protocol Buffer实例

    实际工作的Protocol Buffer使用经验 # 写proto文件- 协议版本 项目用的是protobuf2,所以要指定 syntax = "proto2";- 包名 pack ...

  3. 后端程序员之路 21、一个cgi的c++封装

    在"3.fastcgi.fastcgi++"中,我们了解了cgi,也尝试了fastcgi++,这里,再记录一种对fastcgi的封装. 1.cgi接口层    request_t ...

  4. 后端程序员之路 7、Zookeeper

    Zookeeper是hadoop的一个子项目,提供分布式应用程序协调服务. Apache ZooKeeper - Homehttps://zookeeper.apache.org/ zookeeper ...

  5. 后端程序员之路 59、go uiprogress

    gosuri/uiprogress: A go library to render progress bars in terminal applicationshttps://github.com/g ...

  6. 后端程序员之路 43、Redis list

    Redis数据类型之LIST类型 - Web程序猿 - 博客频道 - CSDN.NEThttp://blog.csdn.net/thinkercode/article/details/46565051 ...

  7. 后端程序员之路 22、RESTful API

    理解RESTful架构 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2011/09/restful.html RESTful API 设计指南 - 阮一峰的网络日 ...

  8. 后端程序员之路 57、go json

    go自带json处理库,位于encoding/json,里面的test很具参考意义,特别是example_test.go json - The Go Programming Languagehttps ...

  9. 后端程序员之路 54、go 日志库

    一个朋友写的日志库 https://github.com/vizee/echo go get -u -v github.com/vizee/echo package main import (    ...

随机推荐

  1. JVM之堆参数

    1.Java 7和Java 8区别 Java 7堆结构 JDK 1.8之后将最初的永久代取消了,由元空间取代. 在Java8中,永久代已经被移除,被一个称为元空间的区域所取代.元空间的本质和永久代类似 ...

  2. 牛客编程巅峰赛S2第10场 - 钻石&王者 C.牛牛的路径和 (位运算,dfs)

    题意:给你节点数为\(n\)的树,每个节点都有自己的权值,求所有路径的上的点的权值按位与的和. 题解:题目给的数据很大,我们不能直接去找.因此我们可以枚举二进制\([1,20]\)的每一位,然后再枚举 ...

  3. JavaScript——六

    magin和padding的区别:https://www.cnblogs.com/zxnn/p/8186225.html magin:兄弟之间的 padding:父子关系 body和网页边框左右距离上 ...

  4. Windows10电脑优化和使用

    本文将结合自身经验和短视频软件中的优化技巧,推荐一些Win10系统的优化和使用小技巧. 电脑优化 新电脑调出我的电脑等桌面图标: 右键桌面,选择个性化,左侧选择主题,在相关的设置中找到桌面图标设置,将 ...

  5. codeforces 1045I Palindrome Pairs 【stl+构造】

    题目:戳这里 题意:给1e5个字符串,问有多少对字符串组合,满足最多只有一种字符有奇数个. 解题思路:每种情况用map存一下就行了.感觉这题自己的代码思路比较清晰,所以写个题解记录一下 附ac代码: ...

  6. 读js DOM编程艺术总结

    第一章主要介绍一些历史性问题,javascript是Netcape和sun公司合作开发的. 第二章JavaScript语法: 1,数据类型:(弱类型)字符串,数值,布尔值(只有true和false,不 ...

  7. HDU 3247 Resource Archiver(AC自动机 + 状压DP + bfs预处理)题解

    题意:目标串n( <= 10)个,病毒串m( < 1000)个,问包含所有目标串无病毒串的最小长度 思路:貌似是个简单的状压DP + AC自动机,但是发现dp[1 << n][ ...

  8. μC/OS-III---I笔记12---任务管理

    任务管理任务切换应该算是UCOS最基本的部分,首先保存当前任务寄存器的内容到当前任务的堆栈:接着弹出即将进行的任务的堆栈内容到寄存器中然后就是按寄存器内容执行,这个过程成为上下文切换.任务堆栈在创建任 ...

  9. Virtualbox 安装centos7虚拟机

    Virtualbox 安装centos7虚拟机 一,下载centos7 下载地址:https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x ...

  10. TypeScript Version 23 Design Patterns

    TypeScript Version 23 Design Patterns TypeScript 设计模式 https://refactoring.guru/design-patterns/types ...