亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python 帶你快速上手 Apache APISIX 插件開(kāi)發(fā)

 更新時(shí)間:2021年09月17日 16:43:59   作者:Apache_APISIX  
Apache APISIX Python Runner 來(lái)了,社區(qū)中的小伙伴們?cè)陂_(kāi)發(fā) Apache APISIX 插件時(shí)又多了一種新選擇,本文將用實(shí)列向大家介紹,需要的朋友可以參考下面文章內(nèi)容

前言:

熟悉 Apache APISIX 的小伙伴都知道,之前在社區(qū)中我們已經(jīng)支持了 Java 和 Go 語(yǔ)言的 Runner,今天 Apache APISIX Python Runner 也來(lái)了,社區(qū)中的小伙伴們?cè)陂_(kāi)發(fā) Apache APISIX 插件時(shí)又多了一種新選擇。

Python 語(yǔ)言作為一個(gè)解釋型的高級(jí)編程語(yǔ)言,它語(yǔ)法簡(jiǎn)潔易上手、代碼可讀性好 ,在跨平臺(tái) 、可移植性 、開(kāi)發(fā)效率上都有很好的表現(xiàn),同時(shí)作為一個(gè)高級(jí)編程語(yǔ)言它的封裝抽象程度比較高屏蔽了很多底層細(xì)節(jié)(例如:GC )讓我們?cè)陂_(kāi)發(fā)的過(guò)程中可以更專(zhuān)注應(yīng)用邏輯的開(kāi)發(fā)。

同時(shí)作為一個(gè)有 30 年歷史的老牌開(kāi)發(fā)語(yǔ)言,它的生態(tài)以及各種模塊已經(jīng)非常完善,我們大部分的開(kāi)發(fā)和應(yīng)用場(chǎng)景都可以從社區(qū)中找到很成熟的模塊或解決方案。

Python 其他的優(yōu)點(diǎn)就不再一一贅述,當(dāng)然它的缺點(diǎn)也比較明顯:Python 作為一門(mén)解釋性語(yǔ)言,相較于 C++ 和 Go 這樣的編譯型語(yǔ)言,在性能上的差距還是比較大的。

一、了解:項(xiàng)目架構(gòu)

apache-apisix-python-runner 這個(gè)項(xiàng)目可以理解為 Apache APISIX Python 之間的一道橋梁,通過(guò) Python Runner 可以把 Python 直接應(yīng)用到 Apache APISIX 的插件開(kāi)發(fā)中,最重要的還是希望讓更多對(duì) Apache APISIX 和 API 網(wǎng)關(guān)感興趣的 Python 開(kāi)發(fā)者通過(guò)這個(gè)項(xiàng)目,更多地了解和使用 Apache APISIX,以下為 Apache APISIX 多語(yǔ)言支持的架構(gòu)圖。

上圖左邊是 Apache APISIX 的工作流程,右邊的 Plugin Runner 是各語(yǔ)言的插件運(yùn)行器,本文介紹的 apisix-python-plugin-runner 就是支持 Python 語(yǔ)言的 Plugin Runner。

Apache APISIX 中配置一個(gè) Plugin Runner 時(shí),Apache APISIX 會(huì)啟動(dòng)一個(gè)子進(jìn)程運(yùn)行 Plugin Runner,該子進(jìn)程與 Apache APISIX 進(jìn)程屬于同一個(gè)用戶,當(dāng)我們重啟或重新加載 Apache APISIX 時(shí),Plugin Runner 也將被重啟。

如果你為一個(gè)給定的路由配置了 ext-plugin-* 插件,請(qǐng)求命中該路由時(shí)將觸發(fā) Apache APISIX 通過(guò) Unix Socket Plugin Runner 發(fā)起 RPC 調(diào)用。調(diào)用分為兩個(gè)階段:

  • ext-plugin-pre-req :在執(zhí)行 Apache APISIX 內(nèi)置插件(Lua 語(yǔ)言插件)之前
  • ext-plugin-post-req :在執(zhí)行 Apache APISIX 內(nèi)置插件(Lua 語(yǔ)言插件)之后

大家可以根據(jù)需要選擇并配置 Plugin Runner 的執(zhí)行時(shí)機(jī)。Plugin Runner 會(huì)處理 RPC 調(diào)用,在其內(nèi)部創(chuàng)建一個(gè)模擬請(qǐng)求,然后運(yùn)行多語(yǔ)言編寫(xiě)的插件,并將結(jié)果返回給 Apache APISIX。

多語(yǔ)言插件的執(zhí)行順序是在 ext-plugin-* 插件配置項(xiàng)中定義的,像其他插件一樣,它們可以被啟用并在運(yùn)行中重新定義。

二、安裝:部署測(cè)試

基礎(chǔ)運(yùn)行環(huán)境:Apache APISIX 2.7、Python 3.6+

Apache APISIX 的安裝部署可參考 Apache APISIX 官方文檔:如何構(gòu)建 Apache APISIX (https://github.com/apache/api...)進(jìn)行部署。

1. 下載安裝 Python Runner

$ git clone https://github.com/apache/apisix-python-plugin-runner.git
$ cd apisix-python-plugin-runner
$ make install

2. 配置 Python Runner

  • 開(kāi)發(fā)模式配置

運(yùn)行 Python Runner:

    $ cd /path/to/apisix-python-plugin-runner
    $ APISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock python3 apisix/main.py start
    修改 Apache APISIX 配置文件
    $ vim /path/to/apisix/conf/config.yaml
    apisix:
      admin_key:
        - name: "admin"
          key: edd1c9f034335f136f87ad84b625c8f1
          role: admin
    ext-plugin:
      path_for_test: /tmp/runner.sock
    
    
    
  • 生產(chǎn)模式配置

修改 Apache APISIX 配置文件

    $ vim /path/to/apisix/conf/config.yaml
    apisix:
      admin_key:
        - name: "admin"
          key: edd1c9f034335f136f87ad84b625c8f1
          role: admin
    ext-plugin:
      cmd: [ "python3", "/path/to/apisix-python-plugin-runner/apisix/main.py", "start" ]
    
    
    
  • Python Runner 配置(可選)

如果需要對(duì) Log Level Unix Domain Socket 環(huán)境變量調(diào)整可以修改 Runner 的配置文件

$ vim /path/to/apisix-python-plugin-runner/apisix/config.yaml
socket:
  file: $env.APISIX_LISTEN_ADDRESS # Environment variable or absolute path

logging:
  level: debug # error warn info debug

3. 啟動(dòng) Python Runner

$ cd /path/to/apisix
# Start or Restart
$ ./bin/apisix [ start | restart ]


啟動(dòng)或重啟 Apache APISIX 即可,此時(shí) Apache APISIX Python Runner 已經(jīng)完成配置并啟動(dòng)。

4. 測(cè)試 Python Runner

配置 Apache APISIX 路由及插件信息:

# 使用默認(rèn)demo插件進(jìn)行測(cè)試
$ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
  "uri": "/get",
  "plugins": {
    "ext-plugin-pre-req": {
      "conf": [
        { "name": "stop", "value":"{\"body\":\"hello\"}"}
      ]
    }
  },
  "upstream": {
        "type": "roundrobin",
        "nodes": {
            "127.0.0.1:1980": 1
        }
    }
}'


  • plugins.ext-plugin-pre-req.confRunner 插件配置,conf 為數(shù)組格式可以同時(shí)設(shè)置多個(gè)插件。
  • 插件配置對(duì)象中 name 為插件名稱(chēng),該名稱(chēng)需要與插件代碼文件和對(duì)象名稱(chēng)一致。
  • 插件配置對(duì)象中 value 為插件配置,可以為 JSON 字符串。

 訪問(wèn)驗(yàn)證:

$ curl http://127.0.0.1:9080/get -i
HTTP/1.1 200 OK
Date: Fri, 13 Aug 2021 13:39:18 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
host: 127.0.0.1:9080
accept: */*
user-agent: curl/7.64.1
X-Resp-A6-Runner: Python
Server: APISIX/2.7

Hello, Python Runner of APISIX

三、實(shí)踐:插件開(kāi)發(fā)

1. 插件目錄

/path/to/apisix-python-plugin-runner/apisix/plugins


此目錄中的 .py 文件將會(huì)被自動(dòng)加載。

2. 插件示例

/path/to/apisix-python-plugin-runner/apisix/plugins/stop.py
/path/to/apisix-python-plugin-runner/apisix/plugins/rewrite.py

3. 插件格式

from apisix.runner.plugin.base import Base
from apisix.runner.http.request import Request
from apisix.runner.http.response import Response


class Stop(Base):
    def __init__(self):
        """
        Example of `stop` type plugin, features:
            This type of plugin can customize response `body`, `header`, `http_code`
            This type of plugin will interrupt the request
        """
        super(Stop, self).__init__(self.__class__.__name__)

    def filter(self, request: Request, response: Response):
        """
        The plugin executes the main function
        :param request:
            request parameters and information
        :param response:
            response parameters and information
        :return:
        """
        # 在插件中可以通過(guò) `self.config` 獲取配置信息,如果插件配置為JSON將自動(dòng)轉(zhuǎn)換為字典結(jié)構(gòu)
        # print(self.config)

        # 設(shè)置響應(yīng)頭信息
        headers = request.headers
        headers["X-Resp-A6-Runner"] = "Python"
        response.headers = headers

        # 設(shè)置響應(yīng)體信息
        response.body = "Hello, Python Runner of APISIX"

        # 設(shè)置響應(yīng)狀態(tài)碼
        response.status_code = 201

        # 通過(guò)調(diào)用 `self.stop()` 中斷請(qǐng)求流程,此時(shí)將立即響應(yīng)請(qǐng)求給客戶端
        # 如果未顯示調(diào)用 `self.stop()` 或 顯示調(diào)用 `self.rewrite()`將繼續(xù)將請(qǐng)求
        # 默認(rèn)為 `self.rewrite()`
        self.stop()

4. 插件規(guī)范及注意事項(xiàng)

  • 實(shí)現(xiàn)插件對(duì)象必須繼承 Base 類(lèi)
  • 插件必須實(shí)現(xiàn) filter 函數(shù)
  • filter 函數(shù)參數(shù)只能包含 Request Response 類(lèi)對(duì)象作為參數(shù)
  • Request 對(duì)象參數(shù)可以獲取請(qǐng)求信息
  • Response 對(duì)象參數(shù)可以設(shè)置響應(yīng)信息
  • self.config 可以獲取插件配置信息
  • filter 函數(shù)中調(diào)用 self.stop() 時(shí)將馬上中斷請(qǐng)求,響應(yīng)數(shù)據(jù)。
  • filter 函數(shù)中調(diào)用 self.rewrite() 時(shí),將會(huì)繼續(xù)請(qǐng)求。

到此這篇關(guān)于Python 帶你快速上手 Apache APISIX 插件開(kāi)發(fā)的文章就介紹到這了,更多相關(guān)Python  Apache APISIX 插件開(kāi)發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python opencv對(duì)圖像進(jìn)行旋轉(zhuǎn)且不裁剪圖片的實(shí)現(xiàn)方法

    python opencv對(duì)圖像進(jìn)行旋轉(zhuǎn)且不裁剪圖片的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇python opencv對(duì)圖像進(jìn)行旋轉(zhuǎn)且不裁剪圖片的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python異步之迭代器如何使用詳解

    Python異步之迭代器如何使用詳解

    這篇文章主要為大家介紹了Python異步之迭代器如何使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 解決python 自動(dòng)安裝缺少模塊的問(wèn)題

    解決python 自動(dòng)安裝缺少模塊的問(wèn)題

    今天小編就為大家分享一篇解決python 自動(dòng)安裝缺少模塊的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python imageio讀取視頻并進(jìn)行編解碼詳解

    Python imageio讀取視頻并進(jìn)行編解碼詳解

    今天小編就為大家分享一篇Python imageio讀取視頻并進(jìn)行編解碼詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python+OpenCV繪制多instance的Mask圖像

    Python+OpenCV繪制多instance的Mask圖像

    Mask圖像中,不同值表示不同的實(shí)例(instance)。本文將詳細(xì)為大家講講如何利用OpenCV繪制多instance的Mask圖像,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • python輸入中文的實(shí)例方法

    python輸入中文的實(shí)例方法

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python輸入中文的實(shí)例方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-09-09
  • 關(guān)于keras中的Reshape用法

    關(guān)于keras中的Reshape用法

    這篇文章主要介紹了關(guān)于keras中的Reshape用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • pandas進(jìn)行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法

    pandas進(jìn)行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法

    今天小編就為大家分享一篇pandas進(jìn)行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Python新手學(xué)習(xí)裝飾器

    Python新手學(xué)習(xí)裝飾器

    在本篇文章里小編給大家整理的是一篇關(guān)于Python裝飾器的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python數(shù)據(jù)結(jié)構(gòu)集合的相關(guān)詳解

    Python數(shù)據(jù)結(jié)構(gòu)集合的相關(guān)詳解

    集合是Python中一種無(wú)序且元素唯一的數(shù)據(jù)結(jié)構(gòu),主要用于存儲(chǔ)不重復(fù)的元素,Python提供set類(lèi)型表示集合,可通過(guò){}或set()創(chuàng)建,集合元素不可重復(fù)且無(wú)序,不支持索引訪問(wèn),但可迭代,集合可變,支持添加、刪除元素,集合操作包括并集、交集、差集等,可通過(guò)運(yùn)算符或方法執(zhí)行
    2024-09-09

最新評(píng)論