偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

即時(shí)微服務(wù)的邏輯和安全規(guī)則

譯文
數(shù)據(jù)庫(kù)
本文介紹了如何使用命令構(gòu)建一個(gè)完整的數(shù)據(jù)庫(kù)系統(tǒng):包括一個(gè)多頁(yè)面的Web應(yīng)用程序和一個(gè)多頁(yè)面API、使用規(guī)則和用Python進(jìn)行自定義。

譯者 | 李睿

審校 | 重樓

本文將介紹如何在幾分鐘內(nèi)而不是幾周或幾個(gè)月內(nèi)構(gòu)建一個(gè)完整的數(shù)據(jù)庫(kù)系統(tǒng):

(1)API:將添加用戶界面(UI)和邏輯使其成為微服務(wù)

(2)邏輯和安全性:多表約束和派生,以及基于角色的安全性

(3)管理應(yīng)用程序:最后構(gòu)建一個(gè)多頁(yè)面、多表格的Web應(yīng)用程序

使用開(kāi)源API邏輯服務(wù)器(API Logic Server)將提供:

關(guān)鍵特性

內(nèi)容描述

重要性

自動(dòng)化

?即時(shí)項(xiàng)目創(chuàng)建:一個(gè)API和一個(gè)管理Web應(yīng)用程序

?解鎖UI應(yīng)用開(kāi)發(fā)

定制

聲明性邏輯和安全性

?5條規(guī)則vs 200行python代碼

?減少40倍后端代碼

迭代

?修改數(shù)據(jù)模型并添加規(guī)則,以及使用Python實(shí)現(xiàn)

?迭代開(kāi)發(fā)

?Python的可擴(kuò)展性

構(gòu)建的過(guò)程只需要10分鐘,而傳統(tǒng)的開(kāi)發(fā)過(guò)程則需要數(shù)周時(shí)間。

本文提供了以下幾種方法:

  • 概念概述:本文側(cè)重于概念和基本過(guò)程,其操作細(xì)節(jié)在附錄中描述。
  • 自我演示:自己安裝和創(chuàng)建這個(gè)數(shù)據(jù)庫(kù)系統(tǒng)。
  • 帶視頻的自我演示:也可以使用這個(gè)視頻(它是相同的數(shù)據(jù)庫(kù)系統(tǒng),但其數(shù)據(jù)庫(kù)是用ChatGPT創(chuàng)建的)。

1.自動(dòng)化:即時(shí)項(xiàng)目

這個(gè)項(xiàng)目是使用如下命令創(chuàng)建的:

$ ApiLogicServer create --project_name=basic_demo --db_url=basic_demo

注意:db_url是縮寫。如果有自己的數(shù)據(jù)庫(kù),可以提供一個(gè)SQLAlchemy URI。

這將通過(guò)讀取模式創(chuàng)建一個(gè)項(xiàng)目。數(shù)據(jù)庫(kù)是客戶(Customer)、訂單(Orders)、項(xiàng)目(Items)和產(chǎn)品(Product),如附錄所示。

可以用VSCode打開(kāi)它,并按如下方式運(yùn)行:

(1)創(chuàng)建虛擬環(huán)境:如附錄所示。

(2)啟動(dòng)服務(wù)器:F5(也在附錄中描述)。

(3)啟動(dòng)管理應(yīng)用程序:使用IDE控制臺(tái)中提供的鏈接或單擊http://localhost:5656/。瀏覽器中應(yīng)該出現(xiàn)如下所示的截圖。

以下將探討已經(jīng)創(chuàng)建的數(shù)據(jù)庫(kù)系統(tǒng)(這與通常的數(shù)據(jù)庫(kù)類似)。

1.1 API與Swagger

數(shù)據(jù)庫(kù)系統(tǒng)為每個(gè)表創(chuàng)建一個(gè)帶有端點(diǎn)的API,具有過(guò)濾、排序、分頁(yè)、樂(lè)觀鎖定和相關(guān)數(shù)據(jù)訪問(wèn)功能,這是一個(gè)自助式服務(wù),為自定義應(yīng)用開(kāi)發(fā)做好準(zhǔn)備。

1.2 Admin App

它還創(chuàng)建了一個(gè)管理應(yīng)用程序(Admin App):多頁(yè)面、多表,可用于業(yè)務(wù)用戶的敏捷協(xié)作和后臺(tái)數(shù)據(jù)維護(hù)。這為API創(chuàng)建的自定義用戶界面(UI)提供補(bǔ)充。

可以單擊客戶2(Customer 2),并查看他們的訂單和項(xiàng)目

2.在IDE中自定義

雖然API/UI自動(dòng)化是一個(gè)很好的開(kāi)端,但實(shí)施邏輯和安全性至關(guān)重要。其方法如下

下面的apply_customization過(guò)程模擬向項(xiàng)目添加安全性,并使用IDE在logic/declare_logic.sh和security/declare_security.py中聲明邏輯和安全性。聲明的安全性和邏輯顯示在下面的截圖中。

在項(xiàng)目的終端窗口中要應(yīng)用自定義:

(1)停止服務(wù)器(紅色停止按鈕,或Shift-F5 -參見(jiàn)附錄)

(2)自定義應(yīng)用

# mac, linux
sh apply_customizations.sh
#windows
./apply_customizations.ps1

2.1聲明安全性

上面的apply_customizations過(guò)程模擬了ApiLogicServer add-authcommand,并使用IDE在logic/declare_logic.sh中聲明安全性。

以下是聲明安全性的過(guò)程:

(1)啟動(dòng)服務(wù)器F5

(2)啟動(dòng)Admin應(yīng)用程序:http://localhost:5656/

(3)登錄賬號(hào)為s1,密碼為p

(4)點(diǎn)擊客戶

注意:

(1)管理應(yīng)用程序現(xiàn)在顯示的客戶數(shù)量已經(jīng)減少

(2)下面的截圖說(shuō)明了安全聲明和操作:

  • 上面代碼面板中的聲明性授予,等等
  • 下面代碼面板的日志記錄,通過(guò)顯示應(yīng)用了哪些授權(quán)(+ Grant:)來(lái)幫助調(diào)試;

2.2聲明邏輯

邏輯(多表派生和約束)是數(shù)據(jù)庫(kù)系統(tǒng)的重要部分,通常占到將近一半。API邏輯服務(wù)器提供類似電子表格的規(guī)則,極大地簡(jiǎn)化和加速邏輯開(kāi)發(fā)。

規(guī)則在Python中聲明,并通過(guò)IDE代碼完成簡(jiǎn)化。下面的屏幕顯示了檢查信用邏輯的5條規(guī)則。

上面的apply_customizations過(guò)程模擬了使用IDE在logic/declare_logic.sh中聲明邏輯的過(guò)程。

可以查看運(yùn)行中的邏輯:

(1)在管理應(yīng)用程序中,注銷(右上角),并以管理員(admin)身份登錄。

(2)使用管理應(yīng)用程序?yàn)榭蛻?添加訂單和項(xiàng)目(見(jiàn)附錄)。

觀察控制臺(tái)日志中觸發(fā)的規(guī)則,如下面的屏幕截圖所示。

邏輯提供了對(duì)過(guò)程邏輯的顯著改進(jìn),如下所述。

A.復(fù)雜性擴(kuò)展

下面的截圖顯示了邏輯聲明和插入項(xiàng)目(Item)的日志記錄。每行表示一個(gè)規(guī)則觸發(fā),并顯示該行的完整狀態(tài)。

注意,這是一個(gè)多表事務(wù),如縮進(jìn)所示。這是因?yàn)?就像電子表格-規(guī)則自動(dòng)鏈,包括跨表。

B.代碼簡(jiǎn)潔40倍

5個(gè)類似電子表格的規(guī)則可以表示與200行代碼相同的邏輯,如下所示。這在系統(tǒng)的后端減少了40倍代碼。

C.自動(dòng)再利用

以上的邏輯(可能是為Place order設(shè)計(jì)的)自動(dòng)應(yīng)用于所有事務(wù):刪除訂單、更改項(xiàng)目、將訂單轉(zhuǎn)移給新客戶等。這減少了代碼,并提高了質(zhì)量(沒(méi)有遺漏的極端情況)。

D.自動(dòng)優(yōu)化

通過(guò)削減和消除昂貴的聚合查詢,可以最小化SQL開(kāi)銷。這些可能導(dǎo)致數(shù)量級(jí)的影響。

E.規(guī)則透明

規(guī)則是一種可執(zhí)行的設(shè)計(jì)。需要注意的是,它們完全映射到自然語(yǔ)言設(shè)計(jì)(如注釋所示),可供業(yè)務(wù)用戶閱讀。

可以選擇使用Behave TDD方法來(lái)定義測(cè)試,并且規(guī)則報(bào)告Rules Report將顯示為每個(gè)測(cè)試執(zhí)行的規(guī)則。

3.使用規(guī)則和Python進(jìn)行迭代

類似于電子表格的規(guī)則不僅簡(jiǎn)潔了40倍的代碼,而且還有效地簡(jiǎn)化了維護(hù)。舉個(gè)例子:

購(gòu)買10件或以上的碳中和產(chǎn)品,給予10%的折扣。

下面的apply_iteration過(guò)程模擬迭代:

  • 通過(guò)Product.CarbonNeutral獲取一個(gè)新的數(shù)據(jù)庫(kù)。
  • 發(fā)出ApiLogicServer rebuild-from-database命令,重建項(xiàng)目(數(shù)據(jù)庫(kù)模型、API),同時(shí)保留上面所做的自定義設(shè)置。
  • 獲取修改后的ui/admin/admin.yaml,在管理應(yīng)用程序中顯示這個(gè)新列。
  • 獲得修改后的邏輯:在logic/declare_logic.py中,將model . item . amount公式的2行替換為以下內(nèi)容(下一個(gè)截圖顯示了使用斷點(diǎn)執(zhí)行的修訂邏輯):

def derive_amount(row: models.Item, old_row: models.Item, logic_row: LogicRow):
 amount = row.Quantity * row.UnitPrice
 if row.Product.CarbonNeutral and row.Quantity >= 10:
 amount = amount * Decimal(0.9) # breakpoint here
 return amount
 Rule.formula(derive=models.Item.Amount, calling=derive_amount)

要應(yīng)用這個(gè)迭代,在項(xiàng)目的終端窗口中:

(1)停止服務(wù)器(紅色停止按鈕,或Shift-F5 -參見(jiàn)附錄)

(2)應(yīng)用迭代

# mac, linux
sh apply_iteration.sh
#windows
./apply_iteration.ps1

(3)設(shè)置斷點(diǎn),如下圖所示

(4)測(cè)試:?jiǎn)?dòng)服務(wù)器,以管理員身份登錄。

(5)使用管理應(yīng)用程序通過(guò)添加12個(gè)綠色項(xiàng)目來(lái)更新訂單

在斷點(diǎn)處,可以使用標(biāo)準(zhǔn)調(diào)試器服務(wù)來(lái)調(diào)試邏輯(檢查項(xiàng)目屬性、步驟等)。

這個(gè)簡(jiǎn)單的例子說(shuō)明了迭代的一些重要方面,將在以下的小節(jié)中描述。

3.1.維護(hù)自動(dòng)化

除了編寫文檔之外,開(kāi)發(fā)人員最討厭的任務(wù)之一就是維護(hù)代碼。這是因?yàn)檫@與編寫代碼無(wú)關(guān),而是需要理解和破譯別人編寫的代碼,這樣就可能添加4或5行代碼,這些代碼有望被調(diào)用并正確運(yùn)行。

規(guī)則改變了這一點(diǎn),因?yàn)樗鼈兓谙到y(tǒng)發(fā)現(xiàn)的依賴關(guān)系對(duì)它們的執(zhí)行(和修改)進(jìn)行自我排序。因此要更改邏輯,只需“在桶中放入一個(gè)新規(guī)則”,數(shù)據(jù)庫(kù)系統(tǒng)將確保以適當(dāng)?shù)捻樞蛘{(diào)用它,并在所有應(yīng)用的用例中重復(fù)使用。維護(hù)速度更快,質(zhì)量更高。

3.2使用Python擴(kuò)展

在這種情況下,需要進(jìn)行一些if/else測(cè)試,添加少量Python非常方便。即使對(duì)于Python新手來(lái)說(shuō),使用“Python作為4GL”非常簡(jiǎn)單。

當(dāng)然,擁有Python及其許多庫(kù)的全部面向?qū)ο蠊δ?,因此不存在自?dòng)化懲罰限制。

3.3調(diào)試:IDE和日志記錄

上面的屏幕截圖說(shuō)明了調(diào)試邏輯是人們所期望的:使用IDE的調(diào)試器。這種“基于標(biāo)準(zhǔn)”的方法適用于其他開(kāi)發(fā)活動(dòng),例如源代碼管理和基于容器的部署。

3.4自定義保留

需要注意,這是從修改后的數(shù)據(jù)庫(kù)重新構(gòu)建項(xiàng)目的,這說(shuō)明可以在保留自定義的同時(shí)進(jìn)行迭代。

4. API定制:標(biāo)準(zhǔn)

當(dāng)然,眾所周知,全世界的所有業(yè)務(wù)都依賴于“hello world”應(yīng)用程序。這是在api/customize_api中提供的。

  • 標(biāo)準(zhǔn)Python
  • 使用Flask
  • 對(duì)于數(shù)據(jù)庫(kù)訪問(wèn),SQLAlchemy:注意所有來(lái)自自定義API的更新也會(huì)強(qiáng)制執(zhí)行其邏輯。

5.部署容器協(xié)作

API邏輯服務(wù)器還創(chuàng)建用于部署的腳本。雖然這一演示不需要這些功能,但這意味著可以與業(yè)務(wù)用戶進(jìn)行協(xié)作:

(1)從項(xiàng)目創(chuàng)建一個(gè)容器。參見(jiàn)devops/docker-image/build_image.sh

(2)上傳到Docker Hub

(3)部署敏捷協(xié)作

結(jié)語(yǔ)

以上在幾分鐘內(nèi)而不是幾天或幾周內(nèi),使用API邏輯服務(wù)器將一個(gè)想法轉(zhuǎn)換為可工作的軟件,自定義邏輯和安全性,并迭代以滿足新的需求。

要想深入了解,可以安裝API邏輯服務(wù)器并執(zhí)行這個(gè)演示,或者從自己的數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)系統(tǒng)。

附錄:數(shù)據(jù)庫(kù)架構(gòu)

附錄:程序

這里提供了運(yùn)行演示的具體過(guò)程,因此它們不會(huì)影響上面的概念討論。

可以使用VSCode或Pycharm。

附錄1.建立虛擬環(huán)境

Python為特定于項(xiàng)目的依賴項(xiàng)使用虛擬環(huán)境。根據(jù)IDE創(chuàng)建一個(gè)如下所示的文件。

VSCode:

建立venv,并通過(guò)第一個(gè)預(yù)構(gòu)建的run Configuration運(yùn)行它。以下建立venv:

python -m venv venv; venv\Scripts\activate # win
python3 -m venv venv; . venv/bin/activate # mac/linux
pip install -r requirements.txt

對(duì)于PyCharm,將獲得一個(gè)對(duì)話框,要求創(chuàng)建venv,然后確定。

附錄2.啟動(dòng)和停止服務(wù)器

兩個(gè)IDE都提供運(yùn)行配置來(lái)啟動(dòng)程序。這些都是由ApiLogicServer create預(yù)先構(gòu)建的。

對(duì)于VSCode,用F5啟動(dòng)服務(wù)器,用Shift-F5或紅色停止按鈕停止。

對(duì)于PyCharm,使用ctrl - d啟動(dòng)服務(wù)器,并使用紅色停止按鈕停止。

附錄3.進(jìn)入新訂單

進(jìn)入新訂單:

(1)點(diǎn)擊“客戶1”。

(2)點(diǎn)擊+“添加新訂單”。

(3)將Notes設(shè)置為“忙碌”,然后按“保存”和“顯示”。

(4)點(diǎn)擊+“添加新項(xiàng)目”。

(5)輸入數(shù)字1,查找“產(chǎn)品1”(Product 1),然后單擊“保存并添加另一個(gè)”。

(6)輸入數(shù)字2000,查找“產(chǎn)品2”(Product 2),然后單擊“保存”。

(7)觀察約束錯(cuò)誤,它是由項(xiàng)目到訂單和客戶的滾動(dòng)觸發(fā)的。

(8)將數(shù)量修改為2,然后單擊“保存”。

附錄4. 更新訂單

探索綠色產(chǎn)品的新邏輯:

(1)訪問(wèn)之前的訂單,并添加新項(xiàng)目。

(2)輸入數(shù)字11,查找綠色產(chǎn)品,然后單擊“保存”。

附錄:添加數(shù)據(jù)庫(kù)列

這里的數(shù)據(jù)庫(kù)是SQLite??梢允褂肧QLite CLI在IDE的終端窗口中添加一個(gè)列:

$ sqlite3 database/db.sqlite
> alter table Products Add CarbonNeutral Boolean;
> .exit

SQLite DBMS安裝了API邏輯服務(wù)器,但不是所有系統(tǒng)都提供CLI。如果沒(méi)有安裝,則需要安裝。

原文標(biāo)題:Instant Microservices: Rules for Logic and Security,作者:Val Huber

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2017-11-22 15:00:34

微服務(wù)基建API

2020-09-08 06:48:07

微服務(wù)算法限流

2020-11-18 09:37:44

微服務(wù)

2022-01-17 10:55:50

微服務(wù)API網(wǎng)關(guān)

2020-07-28 08:32:57

微服務(wù)API網(wǎng)關(guān)熔斷

2022-05-31 18:53:04

微服務(wù)可組合架構(gòu)架構(gòu)

2022-11-02 12:17:41

2020-07-27 10:09:02

微服務(wù)架構(gòu)規(guī)則

2023-10-26 23:35:02

SSH登錄部署

2020-08-18 07:00:00

微服務(wù)開(kāi)發(fā)架構(gòu)

2017-11-14 11:17:53

2017-03-07 11:02:03

Kubernetes微服務(wù)DevOps

2018-12-06 14:56:46

微服務(wù)隔離熔斷

2024-06-05 08:00:00

2024-03-06 08:36:36

2010-11-05 11:36:56

2018-11-05 08:00:00

2020-08-31 08:06:43

微服務(wù)故障雪崩

2020-09-26 10:56:33

服務(wù)器熔斷服務(wù)隔離

2022-04-08 09:00:00

微服務(wù)架構(gòu)安全防火墻
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)