Restful 学习笔记1(包含centos boost库安装)

一、基础知识

1.1 restful

REST(Representational State Transfer)表象化状态转变(表述性状态转变),在2000年被提出,基于HTTP、URI、XML、JSON等标准和协议,支持轻量级、跨平台、跨语言的架构设计。是Web服务的一种新的架构风格(一种思想)。

全称:Resource Representational State Transfer

Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等;
Representational:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词实现。

1.2 REST基础概念

  • 在REST中的一切都被认为是一种资源。
  • 每个资源由URI标识。
  • 使用统一的接口。处理资源使用POST,GET,PUT,DELETE操作类似创建,读取,更新和删除(CRUD)操作。
  • 无状态。每个请求是一个独立的请求。从客户端到服务器的每个请求都必须包含所有必要的信息,以便于理解。
  • 通信都是通过展现。例如XML,JSON

1.3 REST原则

围绕资源展开讨论,从资源的定义、获取、表述、关联、状态变迁等角度。

RESTful架构的主要原则

  • 对网络上所有的资源都有一个资源标志符。
  • 对资源的操作不会改变标识符。
  • 同一资源有多种表现形式(xml、json)
  • 所有操作都是无状态的(Stateless)

  简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。

1.4 统一接口

RESTful 架构的核心规范与约束:统一接口
分为四个子约束:

  • 每个资源都拥有一个资源标识,每个资源的资源标识可以用来唯一地标明该资源
  • 消息的自描述性
  • 资源的自描述性。
  • HATEOAS Hypermedia As The Engine Of Application State(超媒体作为应用状态引擎)

RESTful中根据操作资源的不同,使用不同的http方法,其传输的媒介一般使用json。

(1)对于资源的具体操作类型,由HTTP动词表示:

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
  • DELETE(DELETE):从服务器删除资源
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

 (2)api 过滤信息

如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

 

1.5 restful应用

随着移动互联网的发展,客户端层出不穷,app,web,微信端等等,而后端业务逻辑基于是一致的,如何做到业务逻辑“一次编写,随时接入”?答案是通过远程调用API,而目前比较火的方案是“Restful api”。简单来说,RESTful API 是基于HTTP协议产生的一种相对简单的API设计方案,属于无状态传输。各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务

2 C++ 实现Restful

实践内容以github 的案例为准:

https://github.com/eidheim/Simple-Web-Server

2.1 简介

A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Asio (both Boost.Asio and standalone Asio can be used). Created to be an easy way to make REST resources available from C++ applications.

Features

  • Asynchronous request handling
  • Thread pool if needed
  • Platform independent
  • HTTPS support
  • HTTP persistent connection (for HTTP/1.1)
  • Client supports chunked transfer encoding
  • Timeouts, if any of Server::timeout_request and Server::timeout_content are >0 (default: Server::timeout_request=5 seconds, and Server::timeout_content=300 seconds)
  • Simple way to add REST resources using regex for path, and anonymous functions

2.2 编译运行

2.2.1下载并解压测试用例

 unzip Simple-WebSocket-Server-master.zip

2.2.2 安装并配置依赖库

Dependencies

  • Boost.Asio or standalone Asio
  • Boost is required to compile the examples
  • For HTTPS: OpenSSL libraries

(1)安装并配置boost 库

  • 下载boost 库

https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.gz

  • 安装依赖环境
 yum -y install gcc gcc-c++ libicu libicu-devel zlib zlib-devel bzip2 bzip2-devel

 centos 中默认安装了python ,只安装 phthon-devel

yum install python36-devel
  •  进入解压出的boost目录,执行./bootstrap.sh编译boost库;
  • 执行./b2 install安装;
  • 刷新链接库 
    ldconfig 
    ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。 
  • 编写测试boost库是否安装成功
#include <string>
#include <iostream>
#include <boost/version.hpp>  //包含Boost头文件
#include <boost/config.hpp>   //包含Boost头文件
using namespace std;
int main()
{
        std::cout << BOOST_VERSION << endl;
        std::cout << "hello" <<std::endl;
}

 编译连接   g++ boost_test.cpp -o test,并运行,如下所示boost 库安装成功。

(2)安装OpenSSL 库

 OpenSSL是一个开放源代码软件包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。

yum install openssl
yum install openssl-devel

 
2.2.3 编译运行

Compile and run

Compile with a C++11 compliant compiler:

mkdir build
cd build
cmake ..
make
cd ..

编译连接如下: 

 

编译运行:

参考文献:

【1】理解RESTful架构:http://www.ruanyifeng.com/blog/2011/09/restful.html

【2】RESTful 架构详解: https://www.runoob.com/w3cnote/restful-architecture.html

【3】RESTful到底是什么:https://www.cnblogs.com/zhangruifeng/p/13257731.html

【4】restful api 实战:https://www.imooc.com/learn/811/

【5】怎样用通俗的语言解释REST,以及RESTful?:https://www.zhihu.com/question/28557115/answer/48094438

【6】如何给老婆通俗讲restful: https://zhuanlan.zhihu.com/p/30396391

【7】RESTful API 设计指南:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

【8】Restbed - C++11 异步RESTful框架:https://www.ctolib.com/restbed.html

【9】pastache: http://pistache.io

【10】postman+linux+pistache的http通信过程:https://www.bbsmax.com/A/QW5YV4RKdm/

https://blog.csdn.net/pengjian444/article/details/71069483?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242

【11】RESTFUL API Server in C++:

https://blog.csdn.net/ztguang/article/details/51509095

https://github.com/eidheim/Simple-Web-Server

【12】CentOS下安装boost库:https://blog.csdn.net/WilliamFu95/article/details/94664460

【13】CentOS8上安装配置Python3.8:https://blog.csdn.net/jaray/article/details/103258281?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&dist_request_id=1328769.55742.16175888476364199&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值