我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python微服务设计

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python微服务设计

Nameko + API Swagger

创建项目

## 安装微服务框架
pip install nameko==2.5.4.4
## 安装api框架
pip install nameko-swagger==1.2.7
## 创建项目
nameko-admin createproject demo

项目目录结构

demo/
    .tox/   
    bin/
        run.sh
    conf/
        config.yaml
    logs/
    service/
        demo.py
    spec/
        v1/
            api.yaml
    test/
    ... ##

默认配置

## api.yaml
paths:
  /demo/health:
    get:
      summary: 获取服务健康状态
      tags:
        - demo
      operationId: get_health
      responses:
        default:
          description: |
            返回结果:{"code": "xxx", "msg": "xxx", "data": {}, "time": xxx, "why": "xxx"}

            其中`code`字段可能返回的错误码包括:
            * "OK" 操作成功,结果见`data`字段
            * "INTERNAL_SERVER_ERROR" 内部错误,具体原因见`why`字段
          schema:
            $ref: '#/definitions/HealthResponse'
## demo.py
@swagger.unmarshal_request
@http('GET', '/v1/demo/health')
def http_get_health(self, request):
    return dict(code='OK', msg='', data={}, time=int(time.time()))

配置在路径path的作用域中

## api.yaml添加path的路径参数配置
/demo/path/index/{uid}:
    get:
      summary: 根据请求参数在path中进行查询
      tags:
        - demo
      operationId: index
      parameters:
        - name: uid
          in: path        # Note the name is the same as in the path
          description: 用户uid
          required: true
          type: integer
      responses:
        default:
          description: |
            返回结果:{"code": "xxx", "msg": "xxx", "data": {}, "time": xxx, "why": "xxx"}

            其中`code`字段可能返回的错误码包括:
            * "OK" 操作成功,结果见`data`字段
            * "INTERNAL_SERVER_ERROR" 内部错误,具体原因见`why`字段
          schema:
            $ref: '#/definitions/HealthResponse'
## demo.py
@swagger.unmarshal_request
@http('GET', '/v1/demo/path/index/<int:uid>')
def path_index(self, request, uid):
    logger.info(request)
    logger.info(uid)
    return dict(code='OK', msg='', data={r"msg": "path index success..."}

配置在路径query作用域中

## api.yaml
/demo/query/index:
    get:
      summary: 根据请求参数在query中查询
      operationId: query_index
      parameters:
        - name: cid
          in: query
          description: 用户频道Id
          required: true
          type: integer
      responses:
        default:
          description: |
           返回结果:{"code": "xxx", "msg": "xxx", "data": {}, "time": xxx, "why": "xxx"}

            其中`code`字段可能返回的错误码包括:
            * "OK" 操作成功,结果见`data`字段
            * "INTERNAL_SERVER_ERROR" 内部错误,具体原因见`why`字段
          schema:
            $ref: '#/definitions/HealthResponse'
## demo.py
@swagger.unmarshal_request
@http('GET', '/v1/demo/query/index')
def query_index(self, request, cid):
    logger.info(request)
    logger.info(cid)
    return dict(code='OK',
                msg='',
                data={"cid": cid},
                time=int(time.time()))

配置在query中查询多个

## api.yaml
/demo/query/many:
    get:
      summary: 根据请求参数在query中查询
      operationId: query_many
      parameters:
        - name: cid
          in: query
          description: 用户频道Id
          required: true
          type: integer
          minimum: 1
        - name: uid
          in: query
          description: 用户id
          required: false
          type: integer
          minimum: 1
        - name: channelid
          in: query
          required: false
          type: string
      responses:
        default:
          description: |
           返回结果:{"code": "xxx", "msg": "xxx", "data": {}, "time": xxx, "why": "xxx"}

            其中`code`字段可能返回的错误码包括:
            * "OK" 操作成功,结果见`data`字段
            * "INTERNAL_SERVER_ERROR" 内部错误,具体原因见`why`字段
          schema:
            $ref: '#/definitions/HealthResponse'
## demo.py
@swagger.unmarshal_request
@http('GET', '/v1/demo/query/many')
def query_many(self, request,
               cid,
               uid=0,
               channelid=0):
    logger.info(request)
    logger.info(cid)
    logger.info(uid)
    logger.info(channelid)
    return dict(code='OK',
                msg='',
                data={"cid": cid,
                      "uid": uid,
                      "channelid": channelid},
                time=int(time.time()))

在post的表单中查询

## api.yaml
/demo/post:
    post:
      summary: 根据请求参数在post的表单中查询
      operationId: do_post
      parameters:
        - name: cid
          in: formData
          description: 用户频道Id
          required: true
          type: integer
          minimum: 1
        - name: uid
          in: formData
          description: 用户id
          required: false
          type: integer
          minimum: 1
        - name: channelid
          in: formData
          required: false
          type: string
      responses:
        default:
          description: |
           返回结果:{"code": "xxx", "msg": "xxx", "data": {}, "time": xxx, "why": "xxx"}

            其中`code`字段可能返回的错误码包括:
            * "OK" 操作成功,结果见`data`字段
            * "INTERNAL_SERVER_ERROR" 内部错误,具体原因见`why`字段
          schema:
            $ref: '#/definitions/HealthResponse'
## demo.py
@swagger.unmarshal_request
@http('POST', '/v1/demo/post')
def do_post(self, request,
               cid,
               uid=0,
               channelid=""):
    logger.info(request)
    logger.info(cid)
    logger.info(uid)
    logger.info(channelid)
    return dict(code='OK',
                msg='do post message',
                data={"cid": cid,
                      "uid": uid,
                      "channelid": channelid},
                time=int(time.time()*1000))

配置在post中查询多个

## api.yaml
/demo/post/query:
    post:
      summary: 根据请求参数在post的表单以及query的路径中查询
      operationId: query_post
      parameters:
        - name: cid
          in: query
          description: 用户频道Id
          required: true
          type: integer
          minimum: 1
        - name: uid
          in: query
          description: 用户id
          required: false
          type: integer
          minimum: 1
        - name: channelid
          in: formData
          required: false
          type: string
      responses:
        default:
          description: |
           返回结果:{"code": "xxx", "msg": "xxx", "data": {}, "time": xxx, "why": "xxx"}

            其中`code`字段可能返回的错误码包括:
            * "OK" 操作成功,结果见`data`字段
            * "INTERNAL_SERVER_ERROR" 内部错误,具体原因见`why`字段
          schema:
            $ref: '#/definitions/HealthResponse'
## demo.py
@swagger.unmarshal_request
@http('POST', '/v1/demo/post/query')
def query_post(self, request,
               cid,
               uid=0,
               channelid=""):
    logger.info(request)
    logger.info(cid)
    logger.info(uid)
    logger.info(channelid)
    return dict(code='OK',
                msg='query post message',
                data={"cid": cid,
                      "uid": uid,
                      "channelid": channelid},
                time=int(time.time() * 1000))

配置在body中

## api.yaml
/demo/post/body:
    post:
      summary: 根据请求参数在body中查询
      operationId: query_body
      parameters:
        - in: body
          name: jsonParameters
          schema:
            $ref: '#/definitions/RequestJson'
      responses:
        default:
          description: |
           返回结果:{"code": "xxx", "msg": "xxx", "data": {}, "time": xxx, "why": "xxx"}

            其中`code`字段可能返回的错误码包括:
            * "OK" 操作成功,结果见`data`字段
            * "INTERNAL_SERVER_ERROR" 内部错误,具体原因见`why`字段
          schema:
            $ref: '#/definitions/HealthResponse'

## 定义的requestJson格式
definitions:
  RequestJson:
    description: 请求参数在body中的json格式
    type: object
    properties:
      cid:
         description: 用户的cid
         type: integer
      uid:
         description: 用户的uid
         type: integer
      channelid:
         description: 频道Id
         type: string
    required:
      - cid
## demo.py
@swagger.unmarshal_request
@http('POST', '/v1/demo/post/body')
def query_body(self, request, jsonParameters):
    u"""
    jsonParameters名称要和api.yaml上声明的name一致,请求的body的json格式为
    {
        cid:"",
        uid:"",
        channelid:""
    }
    ## 使用这种可以传递一个对象的json数据而避免使用过长的参数列表来进行request请求
    """
    return dict(code='OK',
                msg='query post message',
                data=jsonParameters,
                time=int(time.time() * 1000))

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python微服务设计

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python微服务设计

Nameko + API Swagger创建项目## 安装微服务框架pip install nameko==2.5.4.4## 安装api框架pip install nameko-swagger==1.2.7## 创建项目nameko-ad
2023-01-31

新浪微博爬虫设计(Python版)

最近手头上有一个项目,是关于新浪微博的,其中有一环要做新浪微博的爬虫。虽然之前把《Python学习手册》和《Python核心编程》都囫囵吞栆地通读完了,不过真正到做项目的时候还是什么都不会。于是在网上找了大量的资料。关于获取新浪微博的内容,
2023-01-31

PHP 微服务架构的设计与实现

php 微服务架构遵循单一职责、松散耦合、可扩展性、容错性原则,通过案例示范创建用户管理微服务。微服务通常部署在 docker 或 kubernetes 中,监控性能、可用性、错误和依赖关系至关重要,以实现可扩展、容错、可维护的应用程序。P
PHP 微服务架构的设计与实现
2024-05-08

PHP Web 服务开发与 API 设计的微服务集成

将微服务集成到 php web 服务和 api 设计中可使用 php 和 restful api,通过安装必要的扩展和库,设计微服务来管理用户和帖子数据,使用 restful api 定义端点,并编写 php 代码来调用微服务并提供 api
PHP Web 服务开发与 API 设计的微服务集成
2024-05-07

微服务之架构技术选型与设计

本文主要介绍了架构技术选型与设计-微服务选型,Spring cloud 实现采用的技术,希望对您的学习有所帮助。架构技术选型与设计-DUBBODubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点(阿里巴巴现在使
2023-06-05

Golang在微服务架构中的设计与实现

go语言中微服务的设计与实现可以遵循以下原则:定义明确的服务边界,实现松散耦合。利用grpc、rest api和channels实现微服务。将业务逻辑封装在接口中,通过明确定义的接口实现服务通信。Go 语言中微服务的设计与实现前言微服务是
Golang在微服务架构中的设计与实现
2024-05-12

百亿流量微服务网关的设计与实现

本文从百亿流量交易系统微服务网关(API Gateway)的现状和面临的问题出发,阐述微服务架构与 API 网关的关系,理顺流量网关与业务网关的脉络,分享API网关知识与经验。API网关概述“计算机科学领域的任何问题都可以通过增加一个间接的
2023-06-05

PHP 企业级应用微服务架构设计问答

微服务架构使用 php 框架(如 symfony 和 laravel)来实现微服务,并遵循 restful 原则和标准数据格式来设计 api。微服务通过消息队列、http 请求或 grpc 进行通信,并使用工具(如 prometheus 和
PHP 企业级应用微服务架构设计问答
2024-05-07

Go语言从单体服务到微服务设计方法是什么

这篇文章主要介绍“Go语言从单体服务到微服务设计方法是什么”,在日常操作中,相信很多人在Go语言从单体服务到微服务设计方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言从单体服务到微服务设计方法
2023-07-05

python 微积分计算

from sympy import *t = Symbol('t')x = Symbol('x')m = integrate(sin(t)/(pi-t),(t,0,x))n = integrate(m,(x,0,pi))print n用ds
2023-01-31

java开发微服务架构怎么设计消息队列

本篇内容介绍了“java开发微服务架构怎么设计消息队列”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!消息队列的作用在微服务开发中我们经常会引
2023-06-25

基于微服务和Docker的PaaS云平台架构设计

  基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发、部署、运维管理、持续开发持续集成的流程。平台提供基础设施、中间件、数据服务、云服务器等资源,开发人员只需要开发业务代码并提交到平台代码库
2023-06-03

基于Go语言的微服务架构设计与实现

随着云计算和容器化技术的快速发展,微服务架构已经成为了构建大型分布式系统的首选架构之一。微服务架构的核心理念是将复杂的单体应用拆分成一系列小而独立的服务,通过轻量级的通信方式进行交互,从而提高系统的可伸缩性、可靠性和可维护性。而Go语言作为
基于Go语言的微服务架构设计与实现
2023-11-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录