Link Search Menu Expand Document

api.py 程式說明

Table of contents

背景

程式說明

api.py是一個使用 FastAPI 架構的 API 伺服器。該服務主要提供文本內容處理、摘要生成和問答服務。它運行在 Uvicorn ASGI 伺服器上。

以下是一些重要的函數及其作用、參數和輸出:

函數:crawler_url

  • 用途:從提供的 URL 中抓取內容。
  • 輸入參數CrawlerUrlRequest 包含要爬取的網址 url
  • 輸出:返回一個包含 codemsgdata 的 JSON 對象,其中 data 包含內容的 URI 和使用的 tokens 數量。

函數:create_upload_file

  • 用途:允許用戶上傳一個文件並從中提取文本。
  • 輸入參數:一個 UploadFile 對象,表示用戶上傳的文件。
  • 輸出:返回一個 JSON 對象,包含 codemsgdata,其中 data 包含內容的 URI 和使用的 tokens 數量。

函數:summary

  • 用途:生成文本內容的摘要。
  • 輸入參數:一個 uri 字串,代表特定內容的識別符和語言代碼。
  • 輸出:返回一個 JSON 對象,包含 codemsgdata,其中 data 包含生成的摘要。

函數:answer

  • 用途:根據用戶的查詢回答問題。
  • 輸入參數:一個 AnswerRequest 對象,包含內容的 uri 和用戶的查詢 query
  • 輸出:返回一個 JSON 對象,包含 codemsgdata,其中 data 包含回答的文本。

錯誤處理器:validate_error_handler 和 http_error_handler

  • 用途:這兩個函數用於處理請求驗證錯誤和 HTTP 錯誤。
  • 輸入參數:一個 Request 對象和一個異常對象。
  • 輸出:返回一個 JSONResponse,包含錯誤碼、錯誤信息和空的 data 對象。

整個服務是由 Uvicorn伺服器在指定的主機地址和端口上運行。服務的配置由 Config 類的一個實例來管理。

專有名詞

Uvicorn

Uvicorn是一個用於ASGI(異步伺服器網閘接口)應用程序的ASGI伺服器,而ASGI是一種支援異步Python應用程序的協議。Uvicorn通常用於運行基於ASGI的Web應用程序,特別是使用框架如FastAPI或Starlette構建的應用程序。以下是一些Uvicorn的主要特點和資訊:

  1. 異步支援: Uvicorn是基於異步編程模型的伺服器,這意味著它能夠處理異步請求和非阻塞的I/O操作。這對於處理高並發性能的Web應用程序非常重要。

  2. 支援ASGI應用: Uvicorn支援ASGI應用程序,這包括許多基於ASGI的Python Web框架,如FastAPI、Starlette、Django Channels等。您可以使用Uvicorn來運行這些框架的Web應用程序。

  3. 自動Reload: Uvicorn支援自動重新載入(Auto-Reload)功能,這意味著在開發過程中,當您對代碼進行更改時,它可以自動重新啟動伺服器,以使新的代碼生效,簡化了開發過程。

  4. 配置選項: Uvicorn提供了多種配置選項,您可以根據需求進行設置,包括主機地址、端口、工作進程數量、日誌級別等。

  5. 性能: Uvicorn被設計成高性能的伺服器,具有低延遲,並能夠處理大量的同時請求。

  6. 簡單使用: 使用Uvicorn非常簡單,通常只需指定ASGI應用的入口點,然後選擇伺服器的主機和端口。

總的來說,Uvicorn是一個用於運行ASGI應用程序的快速、可靠和易於使用的伺服器。它特別適用於開發現代Web應用程序,這些應用程序需要處理大量的異步操作和高並發請求。

ASGI

ASGI是”Asynchronous Server Gateway Interface”的縮寫,它代表一種異步伺服器網關接口。ASGI是一個用於處理異步Python應用程序的通用協議,旨在提供支援非同步處理的Web伺服器和應用程序之間的標準化接口。ASGI的目標是讓開發人員能夠構建高性能、低延遲的Web應用程序,以滿足現代Web應用程序的需求,包括處理大量並發請求和非阻塞的I/O操作。

Uvicorn vs Celery

Uvicorn和Celery是兩個不同的工具,用於不同的用途,並且有不同的原理和性能特點。

  1. 用途:
    • Uvicorn是一個ASGI伺服器,主要用於運行基於ASGI的Web應用程序,特別是異步Python Web框架,如FastAPI、Starlette等。它用於處理接收到的HTTP請求,並將它們路由到相應的處理程序,然後將響應返回給客戶端。
    • Celery是一個分佈式任務佇列,用於處理異步任務,例如後台處理、定時任務、非即時任務等。它將耗時的任務放入佇列中,然後由工作進程(Celery Worker)異步執行這些任務。
  2. 原理:
    • Uvicorn遵循ASGI協議,利用異步處理來處理HTTP請求和響應,它使用事件循環和非阻塞I/O操作來實現高性能和低延遲的Web伺服器。
    • Celery使用分佈式佇列(通常是消息佇列,如RabbitMQ或Redis)來協調和管理任務。當一個任務被添加到佇列時,Celery Worker會從佇列中獲取並執行它。
  3. 性能:
    • Uvicorn是一個高性能的Web伺服器,特別適用於處理大量的同時HTTP請求。它的異步處理模型和事件循環使其能夠有效處理高並發流量。
    • Celery的性能取決於許多因素,包括佇列的選擇、工作進程的數量和任務的複雜性。它的分佈式架構允許擴展,但性能可能受限於佇列和工作進程的配置。

總結來說,Uvicorn和Celery是兩個不同領域的工具,各自有其特定的用途。Uvicorn用於處理Web應用程序的HTTP請求,而Celery用於處理異步任務。性能方面,Uvicorn通常用於實現高性能的Web伺服器,而Celery則用於分佈式任務處理,性能取決於配置和用例。