之前的文章:
如果你看过这个系列的其他文章那么基本上可以玩转workers,唯一的痛点可能是你不擅长或者不喜欢javascript,不喜欢javascript也没关系,只有用其他编程语言呗,如果你喜欢python和rust的话!
我们可以直接将fastapi的代码部署到workres上面,除了用不了自己的数据库,基本上和运行在自己后端没有啥区别
值的注意的是:不是所有标准库都能使用,详情参考https://developers.cloudflare.com/workers/languages/python/stdlib/
下面的示例来自官方示例。
git clone https://github.com/cloudflare/python-workers-examples
cd python-workers-examples/03-fastapi
npx wrangler@latest dev
src/main.py):from fastapi import FastAPI, Request
from pydantic import BaseModel
async def on_fetch(request, env):
import asgi
return await asgi.fetch(app, request, env)
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello, World!"}
@app.get("/env")
async def root(req: Request):
env = req.scope["env"]
return {"message": "Here is an example of getting an environment variable: " + env.MESSAGE}
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@app.post("/items/")
async def create_item(item: Item):
return item
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: str | None = None):
result = {"item_id": item_id, **item.dict()}
if q:
result.update({"q": q})
return result
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
妈妈再也不用担心我不会写javascript来。
如果说Python给Workers带来了亲和力,那Rust带来的就是战斗力。这门语言,就是为了性能、可靠和安全而生的。它那套独特的“所有权”和“借用检查”机制,能在编译的时候就帮你消灭掉一大堆内存管理的坑爹bug。用它来写真正“硬核”的、对性能和安全要求到变态级别的服务,再合适不过了。
写rust的困难之处在于你首先要打败编译器,桀桀桀桀桀桀~~
用Rust写Worker,爽在哪里?
示例:一个基础的Rust Worker
wrangler init my-rust-worker --type=rust
src/lib.rs):// src/lib.rs
use worker::*
#[event(fetch)]
pub async fn main(req: Request, env: Env, _ctx: Context) -> Result<Response> {
// 获取请求的路径
let path = req.path();
// 构造一个简单的响应字符串
let response_text = format!("Hello from Rust Worker! You requested: {}", path);
// 返回一个Response对象
Response::ok(response_text)
}
Rust社区已经为Workers提供了强大的支持。你可以使用worker-rs这个crate来方便地与Workers运行时API交互。更进一步,像Axum这样的Rust Web框架,也可以通过适配层在Workers上运行,让你能够构建复杂且高性能的边缘应用。
希望这个系列的文章对你有帮助,也让我自己写了一些之前没写过的代码。给赛博佛祖敬礼。
之前的文章:
如果你看过这个系列的其他文章那么基本上可以玩转workers,唯一的痛点可能是你不擅长或者不喜欢javascript,不喜欢javascript也没关系,只有用其他编程语言呗,如果你喜欢python和rust的话!
我们可以直接将fastapi的代码部署到workres上面,除了用不了自己的数据库,基本上和运行在自己后端没有啥区别
值的注意的是:不是所有标准库都能使用,详情参考https://developers.cloudflare.com/workers/languages/python/stdlib/
下面的示例来自官方示例。
git clone https://github.com/cloudflare/python-workers-examples
cd python-workers-examples/03-fastapi
npx wrangler@latest dev
src/main.py):from fastapi import FastAPI, Request
from pydantic import BaseModel
async def on_fetch(request, env):
import asgi
return await asgi.fetch(app, request, env)
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello, World!"}
@app.get("/env")
async def root(req: Request):
env = req.scope["env"]
return {"message": "Here is an example of getting an environment variable: " + env.MESSAGE}
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@app.post("/items/")
async def create_item(item: Item):
return item
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: str | None = None):
result = {"item_id": item_id, **item.dict()}
if q:
result.update({"q": q})
return result
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
妈妈再也不用担心我不会写javascript来。
如果说Python给Workers带来了亲和力,那Rust带来的就是战斗力。这门语言,就是为了性能、可靠和安全而生的。它那套独特的“所有权”和“借用检查”机制,能在编译的时候就帮你消灭掉一大堆内存管理的坑爹bug。用它来写真正“硬核”的、对性能和安全要求到变态级别的服务,再合适不过了。
写rust的困难之处在于你首先要打败编译器,桀桀桀桀桀桀~~
用Rust写Worker,爽在哪里?
示例:一个基础的Rust Worker
wrangler init my-rust-worker --type=rust
src/lib.rs):// src/lib.rs
use worker::*
#[event(fetch)]
pub async fn main(req: Request, env: Env, _ctx: Context) -> Result<Response> {
// 获取请求的路径
let path = req.path();
// 构造一个简单的响应字符串
let response_text = format!("Hello from Rust Worker! You requested: {}", path);
// 返回一个Response对象
Response::ok(response_text)
}
Rust社区已经为Workers提供了强大的支持。你可以使用worker-rs这个crate来方便地与Workers运行时API交互。更进一步,像Axum这样的Rust Web框架,也可以通过适配层在Workers上运行,让你能够构建复杂且高性能的边缘应用。
希望这个系列的文章对你有帮助,也让我自己写了一些之前没写过的代码。给赛博佛祖敬礼。