最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言:

熟悉 Apache APISIX 的小伙伴都知道,之前在社區(qū)中我們已經支持了 Java 和 Go 語言的 Runner,今天 Apache APISIX Python Runner 也來了,社區(qū)中的小伙伴們在開發(fā) Apache APISIX 插件時又多了一種新選擇。

Python 語言作為一個解釋型的高級編程語言,它語法簡潔易上手、代碼可讀性好 ,在跨平臺 、可移植性 、開發(fā)效率上都有很好的表現,同時作為一個高級編程語言它的封裝抽象程度比較高屏蔽了很多底層細節(jié)(例如:GC )讓我們在開發(fā)的過程中可以更專注應用邏輯的開發(fā)。

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

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

一、了解:項目架構

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

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

Apache APISIX 中配置一個 Plugin Runner 時,Apache APISIX 會啟動一個子進程運行 Plugin Runner,該子進程與 Apache APISIX 進程屬于同一個用戶,當我們重啟或重新加載 Apache APISIX 時,Plugin Runner 也將被重啟。

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

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

大家可以根據需要選擇并配置 Plugin Runner 的執(zhí)行時機。Plugin Runner 會處理 RPC 調用,在其內部創(chuàng)建一個模擬請求,然后運行多語言編寫的插件,并將結果返回給 Apache APISIX。

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

二、安裝:部署測試

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

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

1. 下載安裝 Python Runner

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

2. 配置 Python Runner

  • 開發(fā)模式配置

運行 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
    
    
    
  • 生產模式配置

修改 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 配置(可選)

如果需要對 Log Level Unix Domain Socket 環(huán)境變量調整可以修改 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. 啟動 Python Runner

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


啟動或重啟 Apache APISIX 即可,此時 Apache APISIX Python Runner 已經完成配置并啟動。

4. 測試 Python Runner

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

# 使用默認demo插件進行測試
$ 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 為數組格式可以同時設置多個插件。
  • 插件配置對象中 name 為插件名稱,該名稱需要與插件代碼文件和對象名稱一致。
  • 插件配置對象中 value 為插件配置,可以為 JSON 字符串。

 訪問驗證:

$ 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

三、實踐:插件開發(fā)

1. 插件目錄

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


此目錄中的 .py 文件將會被自動加載。

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:
        """
        # 在插件中可以通過 `self.config` 獲取配置信息,如果插件配置為JSON將自動轉換為字典結構
        # print(self.config)

        # 設置響應頭信息
        headers = request.headers
        headers["X-Resp-A6-Runner"] = "Python"
        response.headers = headers

        # 設置響應體信息
        response.body = "Hello, Python Runner of APISIX"

        # 設置響應狀態(tài)碼
        response.status_code = 201

        # 通過調用 `self.stop()` 中斷請求流程,此時將立即響應請求給客戶端
        # 如果未顯示調用 `self.stop()` 或 顯示調用 `self.rewrite()`將繼續(xù)將請求
        # 默認為 `self.rewrite()`
        self.stop()

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

  • 實現插件對象必須繼承 Base
  • 插件必須實現 filter 函數
  • filter 函數參數只能包含 Request Response 類對象作為參數
  • Request 對象參數可以獲取請求信息
  • Response 對象參數可以設置響應信息
  • self.config 可以獲取插件配置信息
  • filter 函數中調用 self.stop() 時將馬上中斷請求,響應數據。
  • filter 函數中調用 self.rewrite() 時,將會繼續(xù)請求。

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

相關文章

  • 利用Python讀取txt文檔的方法講解

    利用Python讀取txt文檔的方法講解

    今天小編就為大家分享一篇利用Python讀取txt文檔的方法講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • tensorflow 打印內存中的變量方法

    tensorflow 打印內存中的變量方法

    今天小編就為大家分享一篇tensorflow 打印內存中的變量方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 基于PyQt5自制簡單的文件內容檢索小工具

    基于PyQt5自制簡單的文件內容檢索小工具

    這篇文章主要為大家詳細介紹了如何基于PyQt5自制一個簡單的文件內容檢索小工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-05-05
  • Python 類變量和實例變量的實現與區(qū)別(附示例)

    Python 類變量和實例變量的實現與區(qū)別(附示例)

    本文主要介紹了Python 類變量和實例變量的實現與區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • python如何導入依賴包

    python如何導入依賴包

    在本篇文章里小編給大家整理的是關于python導入依賴包的方法,需要的朋友們學習下。
    2020-07-07
  • 國產化設備鯤鵬CentOS7上源碼安裝Python3.7的過程詳解

    國產化設備鯤鵬CentOS7上源碼安裝Python3.7的過程詳解

    這篇文章主要介紹了國產化設備鯤鵬CentOS7上源碼安裝Python3.7,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 簡單的Python調度器Schedule詳解

    簡單的Python調度器Schedule詳解

    這篇文章主要介紹了簡單的Python調度器Schedule詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • pytyon 帶有重復的全排列

    pytyon 帶有重復的全排列

    輸入開始排列數字和結束排列數字, 就會一個字典序輸出所以的排列情況
    2013-08-08
  • 簡單的抓取淘寶圖片的Python爬蟲

    簡單的抓取淘寶圖片的Python爬蟲

    這篇文章主要介紹了簡單的抓取淘寶圖片的Python爬蟲,方法比較簡單,推薦給小伙伴們參考下。
    2014-12-12
  • python二進制文件的轉譯詳解

    python二進制文件的轉譯詳解

    這篇文章主要介紹了python二進制文件的轉譯詳解的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論

东海县| 叶城县| 沧州市| 莲花县| 磴口县| 永仁县| 登封市| 忻州市| 西平县| 海城市| 栖霞市| 宣武区| 太仆寺旗| 崇信县| 汝城县| 海盐县| 舒城县| 淮阳县| 宁化县| 尚志市| 郴州市| 闵行区| 阿鲁科尔沁旗| 秦安县| 商河县| 福州市| 安泽县| 民勤县| 惠来县| 南安市| 冕宁县| 邓州市| 抚顺市| 光山县| 容城县| 石城县| 萨迦县| 衡阳县| 原平市| 宁津县| 措勤县|