「Protocol Buffer」之PB在HTTP协议中的应用

「Protocol Buffer」系列教程

1.「Protocol_Buffer」之基本使用与格式定义
2.「Protocol Buffer」之PB在HTTP协议中的应用


客户端代码

本例中分别演示了http+json的通信方式与http+Protocol Buffer的通信方式;
本例中的测试用例使用qtaf框架进行管理,实际应用可以视需求而定,只关注核心逻辑即可;

# -*- coding: utf-8 -*-

from testbase.testcase import TestCase
from testbase import datadrive
from testbase.retry import Retry
import requests,json
import sys
from test_pb2 import Person

class Case001(TestCase):
    ‘‘‘http_client
    ‘‘‘
    owner = "enbowang"
    status = TestCase.EnumStatus.Ready
    priority = TestCase.EnumPriority.Normal
    timeout = 1

    #从这里开始进入核心逻辑
    def run_test(self):
        #json方式模拟
        self.start_step("http+json 请求测试")
        url = "http://127.0.0.1:8080/http_json"
        body = b‘{"name":"xx.xxx"}‘
        response = requests.post(url,data=body)
        self.log_info("body:" + str(body))
        self.log_info(‘响应状态:‘+ str(response.status_code))
        self.log_info(‘响应内容:‘+ str(response.text))

        #Protocol Buffer方式模拟,PB格式定义请见该系列上一篇文章
        self.start_step("http+Protocol Buffer 请求测试")
        url = "http://127.0.0.1:8080/http_proto"
        person = Person()
        person.name = "xx.xxx"
        person.id = 123456
        body = person.SerializeToString()
        response = requests.post(url,data=body)
        self.log_info("body:" + str(body))
        self.log_info(‘响应状态:‘+ str(response.status_code))
        self.log_info(‘响应内容:‘+ str(response.text))

if __name__ == ‘__main__‘:
    Case001().debug_run()

服务端代码

服务端使用webpy实现
分别实现了json数据的解析与PB数据的解析

# coding:utf-8
import web,json
from test_pb2 import Person
urls = (
    ‘/http_json‘, ‘index‘,
    ‘/http_proto‘,‘pb‘
    )

#json请求进入该逻辑
class index:
    def GET(self):
        return "Hello"
    def POST(self):
        data = web.data()
        result = json.loads(data)
        return result[‘name‘]

#pb请求进入该逻辑
class pb:
    def GET(self):
        return "Hello"
    def POST(self):
        data = web.data()
        person = Person()
                    person.ParseFromString(data)    #反序列化
        return person.name

app = web.application(urls, globals())

if __name__ == "__main__":
    app.run()

客户端运行结果如下

原文地址:https://blog.51cto.com/13384175/2408749

时间: 2024-10-10 06:04:01

「Protocol Buffer」之PB在HTTP协议中的应用的相关文章

「Protocol Buffer」之PB在gRPC中的应用

相关库的安装 $ python -m pip ×××tall grpcio $ python -m pip ×××tall grpcio-tools googleapis-common-protos Demo程序功能概述 服务器端存在Test_service类中定义了my_function方法,客户端通过gRPC协议进行远程调用:该方法实现的功能是将接受到的字符串内容全部改为大写并返回 PB接口描述文件定义 syntax = "proto3"; package data; #定义数据结

Protocol buffer序列化及其在微信蓝牙协议中的应用

Protocol buffer是Google出品的一种轻便高效的结构化数据存储格式,可对结构化数据进行序列化,并具有语言无关.平台无关等特点,在通信协议和数据存储等领域已经得到广泛的应用.目前其已经提供 C/C++.Java.Python 等语言的 API. 一.Protocol buffer和XML 在数据通信传输时,一般需要将结构化的数据序列化成流进行传送,接收方再反序列化为原始格式数据进行处理.在Web通信领域,XML应用算是最通用的了.在时间性能上,虽然XML的序列化开销还可以,但是反序

Hadoop基于Protocol Buffer的RPC实现代码分析-Server端--转载

原文地址:http://yanbohappy.sinaapp.com/?p=110 最新版本的Hadoop代码中已经默认了Protocol buffer(以下简称PB,http://code.google.com/p/protobuf/)作为RPC的默认实现,原来的WritableRpcEngine已经被淘汰了.来自cloudera的Aaron T. Myers在邮件中这样说的“since PB can provide support for evolving protocols in a co

mac下安装protocol buffer并用python解析

由于业务需要,项目中需要用到google的一种高效的可扩展的结构化数据存储方式protocol buffer(以下简称pb).很多人可能对这个新东西不熟悉,大家都知道xml,json,确很少听过pb,下面我就粗劣总结一下pb在mac环境下的搭建以及用python解析的简单过程. 首先下载最新pb源码,放到相应的文件夹解压. 安装步骤如下(强调一下:如安装不成功,就以管理员身份安装即在每句命令前加上sudo): 这句如果解压完了就不需要了tar -xzf protobuf-2.1.0.tar.gz

微服务架构之「 配置中心 」

在微服务架构的系列文章中,前面已经通过文章<微服务架构之「服务网关 」>介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」.后面还会继续介绍 服务框架.服务监控.服务治理等.还是那句话,只有将这些基础设施弄清楚了,微服务实践的道路才能走的稳.走的远. 「配置中心」,顾名思义,就是用来统一管理项目中所有配置的系统.虽然听起来很简单,但也不要小瞧了这个模块.如果一个中型互联网项目,不采用配置中心的模式,一大堆的各类配置项,各种不定时的修改

Linux 小知识翻译 - 「协议(protocol)」

对于理解服务器和网络来说,「协议」是不可缺少的概念. 「协议(protocol)」有「规则,规定」的意思. 实际上「协议」的函数很广,在通信领域,「协议」规定了「在通信时,什么样的情况下,以什么样的顺序,什么样的方式交互什么样的数据」. 抽象的去理解「协议」可能会比较困难,下面来举个例子. 通过Web以HTML方式交互时使用的协议是「HTTP」(Hyper Text Transfer Protocol).这个协议最重要的就是规定了服务器和客户端之间以HTML方式交互的规则. 比如,客户端连接上服

Ggoogle Protocol Buffer的使用 (基于C++语言)

首先说明的是Protocol Buffle是灵活高效的.它的一个很好的优点(很重要的,我认为)就是后向兼容性--当我们扩展了了.proto文件后,我们照样可以用它来读取之前生成的文件. 下面的例子,为了实现我们的一个应用 :通讯录,它包含一个人的名字,ID,电子邮件,联系电话,并实现存储与读取. 第一步,定义一个 .proto 文件 /* 首先是一个 package名称的声明,它的作用就是防止出现名字的冲突: 当生成C++代码的时候,对应的pacage名称会生成一个相同名字的命名空间. */ p

Protocol Buffer技术详解(语言规范)

Protocol Buffer技术详解(语言规范) 该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流.需要说明的是,Blog的内容并非line by line的翻译,其中包含一些经验性总结,与此同时,对于一些不是非常常用的功能并未予以说明,有兴趣的开发者

Go语言使用Protocol Buffer的小例子

Protocol Buffer与Golang出自同门.Golang对其的支持包在https://github.com/golang/protobuf 下. 弄个小例子. 1. 创建proto文件usermsg.proto  package pfmsg; option java_package = "com.example.pfmsg"; option java_outer_classname = "UserMessage"; enum UserStatus { OF