生信息管理API項(xiàng)目設(shè)計(jì)與實(shí)現(xiàn))
摘要在校園信息化建設(shè)的背景下學(xué)生信息管理是教務(wù)管理系統(tǒng)中基礎(chǔ)且核心的模塊。傳統(tǒng)的管理系統(tǒng)大多采用一體化開(kāi)發(fā)模式前端后端代碼耦合度高接口調(diào)試?yán)щy對(duì)于課程學(xué)習(xí)、小型項(xiàng)目演示來(lái)說(shuō)過(guò)于笨重。為了解決這個(gè)問(wèn)題本項(xiàng)目采用前后端分離思想使用Python的FastAPI高性能Web框架開(kāi)發(fā)一套學(xué)生信息管理RESTful API接口實(shí)現(xiàn)學(xué)生信息的新增、查詢、修改、刪除完整CRUD功能。項(xiàng)目選用SQLite嵌入式數(shù)據(jù)庫(kù)保存數(shù)據(jù)無(wú)需單獨(dú)安裝數(shù)據(jù)庫(kù)服務(wù)開(kāi)箱即用。FastAPI原生集成Swagger UI自動(dòng)接口文檔開(kāi)發(fā)者可以直接在網(wǎng)頁(yè)上查看接口清單、在線調(diào)試接口。項(xiàng)目全部代碼托管在AtomGit代碼云倉(cāng)庫(kù)方便版本管理、代碼共享與項(xiàng)目提交適用于信息安全專業(yè)后端開(kāi)發(fā)課程實(shí)踐。本文章將從項(xiàng)目背景、技術(shù)選型、需求分析、系統(tǒng)設(shè)計(jì)、代碼實(shí)現(xiàn)、功能測(cè)試、倉(cāng)庫(kù)部署、項(xiàng)目總結(jié)幾個(gè)方面完整介紹整個(gè)項(xiàng)目。關(guān)鍵詞FastAPISQLiteRESTful APISwaggerAtomGit學(xué)生信息管理一、項(xiàng)目概述1.1 項(xiàng)目背景現(xiàn)階段Web后端開(kāi)發(fā)普遍使用RESTful API風(fēng)格后端只提供數(shù)據(jù)接口前端通過(guò)網(wǎng)絡(luò)請(qǐng)求獲取、提交數(shù)據(jù)實(shí)現(xiàn)前后端解耦。在高校教學(xué)場(chǎng)景中學(xué)生信息管理系統(tǒng)是非常經(jīng)典的課程實(shí)踐案例。很多課程作業(yè)使用內(nèi)存列表臨時(shí)存儲(chǔ)數(shù)據(jù)程序關(guān)閉后所有數(shù)據(jù)直接丟失無(wú)法持久保存不利于完整演示項(xiàng)目效果。本項(xiàng)目為信息安全專業(yè)課程作業(yè)目標(biāo)是構(gòu)建一套穩(wěn)定、帶持久化存儲(chǔ)的學(xué)生信息管理API。項(xiàng)目不僅實(shí)現(xiàn)基礎(chǔ)增刪改查還增加分頁(yè)查詢、關(guān)鍵詞模糊搜索、參數(shù)合法性校驗(yàn)等拓展功能。同時(shí)自動(dòng)生成Swagger可視化接口文檔不需要手動(dòng)編寫(xiě)接口說(shuō)明文檔降低接口調(diào)試成本。代碼托管在AtomGit云倉(cāng)庫(kù)利用代碼倉(cāng)庫(kù)做版本控制滿足課程云倉(cāng)庫(kù)作業(yè)提交要求。1.2 項(xiàng)目目標(biāo)1. 基于FastAPI搭建Web后端服務(wù)設(shè)計(jì)REST風(fēng)格接口完成學(xué)生信息CRUD操作。2. 使用SQLite本地?cái)?shù)據(jù)庫(kù)持久化存儲(chǔ)學(xué)生信息程序重啟數(shù)據(jù)不會(huì)丟失。3. 自動(dòng)生成Swagger UI接口文檔支持瀏覽器在線查看接口、在線測(cè)試。4. 增加拓展功能分頁(yè)查詢、關(guān)鍵詞模糊檢索、表單參數(shù)校驗(yàn)姓名非空、年齡范圍、郵箱格式校驗(yàn)。5. 項(xiàng)目代碼統(tǒng)一存放至AtomGit云倉(cāng)庫(kù)包含 main.py 主程序、 requirements.txt 依賴文件、 README.md 項(xiàng)目說(shuō)明文檔符合課程作業(yè)提交規(guī)范。6. 支持curl命令直接調(diào)用接口方便開(kāi)發(fā)者在終端快速體驗(yàn)API功能。1.3 開(kāi)發(fā)環(huán)境- 編程語(yǔ)言Python3.9- Web框架FastAPI- ASGI服務(wù)uvicorn- 數(shù)據(jù)庫(kù)SQLite3Python內(nèi)置無(wú)需額外安裝- 依賴庫(kù)fastapi、uvicorn[standard]、email-validator- 代碼托管平臺(tái)AtomGit- 接口文檔Swagger UI、ReDoc二、相關(guān)技術(shù)介紹2.1 FastAPI框架FastAPI是一款現(xiàn)代、高性能的Python Web開(kāi)發(fā)框架基于Pydantic類型校驗(yàn)和Starlette異步Web框架開(kāi)發(fā)。它最大的優(yōu)勢(shì)就是自動(dòng)生成OpenAPI規(guī)范接口文檔也就是Swagger頁(yè)面。開(kāi)發(fā)者只需要定義接口與數(shù)據(jù)模型不需要手動(dòng)寫(xiě)接口文檔啟動(dòng)服務(wù)后直接訪問(wèn) /docs 就能看到可視化接口。同時(shí)FastAPI自帶強(qiáng)大的數(shù)據(jù)校驗(yàn)?zāi)芰?duì)前端傳入的參數(shù)自動(dòng)校驗(yàn)比如年齡限制0~150、郵箱格式檢查、必填字段校驗(yàn)。參數(shù)不合法時(shí)會(huì)直接返回友好錯(cuò)誤提示不需要開(kāi)發(fā)者手寫(xiě)大量判斷代碼大幅減少開(kāi)發(fā)工作量。FastAPI支持同步、異步兩種接口寫(xiě)法性能接近Go語(yǔ)言編寫(xiě)的后端服務(wù)非常適合小型API項(xiàng)目開(kāi)發(fā)。2.2 SQLite數(shù)據(jù)庫(kù)SQLite是輕量級(jí)嵌入式關(guān)系型數(shù)據(jù)庫(kù)整個(gè)數(shù)據(jù)庫(kù)就是一個(gè)單獨(dú)的 .db 文件不需要單獨(dú)安裝數(shù)據(jù)庫(kù)服務(wù)不需要配置賬號(hào)密碼Python自帶驅(qū)動(dòng)開(kāi)箱即用。非常適合課程作業(yè)、小型演示項(xiàng)目。程序第一次運(yùn)行會(huì)自動(dòng)創(chuàng)建 students.db 數(shù)據(jù)庫(kù)文件所有學(xué)生信息全部保存在這個(gè)文件內(nèi)程序關(guān)閉、重啟數(shù)據(jù)不會(huì)丟失對(duì)比純內(nèi)存列表存儲(chǔ)方案實(shí)用性更強(qiáng)。2.3 Swagger UI接口文檔Swagger UI是OpenAPI規(guī)范的可視化頁(yè)面FastAPI自動(dòng)收集所有接口信息生成文檔。訪問(wèn) http://127.0.0.1:8000/docs 網(wǎng)頁(yè)上可以看到全部接口列表、請(qǐng)求參數(shù)、返回示例并且可以直接在網(wǎng)頁(yè)點(diǎn)擊【Try it out】在線發(fā)送請(qǐng)求測(cè)試新增、查詢、修改、刪除接口不用Postman等第三方工具。同時(shí)項(xiàng)目還提供ReDoc文檔頁(yè)面適合閱讀查閱。2.4 AtomGit云倉(cāng)庫(kù)AtomGit是國(guó)內(nèi)代碼托管平臺(tái)類似Gitee、Github支持在線代碼編輯、AI代碼生成、版本管理。本次課程作業(yè)將項(xiàng)目全部文件上傳AtomGit倉(cāng)庫(kù)倉(cāng)庫(kù)內(nèi)包含 main.py 、 requirements.txt 、 README.md 、 students.db 。倉(cāng)庫(kù)可以對(duì)外公開(kāi)訪問(wèn)老師可以直接打開(kāi)倉(cāng)庫(kù)查看全部代碼與項(xiàng)目說(shuō)明滿足本次信息安全云倉(cāng)庫(kù)作業(yè)提交要求。三、系統(tǒng)需求分析3.1 功能需求1. 新增學(xué)生信息提交學(xué)生姓名、年齡、性別、郵箱、手機(jī)號(hào)系統(tǒng)自動(dòng)生成自增id校驗(yàn)姓名不能為空年齡在0~150郵箱格式合法。2. 查詢?nèi)繉W(xué)生支持分頁(yè)設(shè)置page頁(yè)碼、page_size每頁(yè)條數(shù)支持關(guān)鍵詞模糊搜索可以根據(jù)姓名、郵箱、手機(jī)號(hào)檢索匹配學(xué)生。3. 查詢單個(gè)學(xué)生傳入學(xué)生id返回該學(xué)生完整信息id不存在返回提示信息。4. 修改學(xué)生信息根據(jù)id更新學(xué)生資料可以只提交需要修改的字段不需要一次性提交全部字段。5. 刪除學(xué)生根據(jù)id刪除指定學(xué)生記錄id不存在返回錯(cuò)誤提示。6. 接口文檔自動(dòng)生成Swagger頁(yè)面在線查看、調(diào)試所有接口。3.2 非功能需求1. 易用性部署簡(jiǎn)單一條pip命令安裝依賴一行命令啟動(dòng)服務(wù)。2. 可維護(hù)性代碼結(jié)構(gòu)清晰注釋完善README文檔完整說(shuō)明項(xiàng)目部署步驟。3. 健壯性參數(shù)自動(dòng)校驗(yàn)非法輸入直接攔截返回清晰錯(cuò)誤信息。3.3 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)學(xué)生數(shù)據(jù)表student字段設(shè)計(jì)字段 類型 說(shuō)明id int 主鍵自增學(xué)生唯一編號(hào)name string 學(xué)生姓名必填age int 年齡限制0~150gender string 性別男/女/其他email string 郵箱格式校驗(yàn)phone string 手機(jī)號(hào)四、系統(tǒng)設(shè)計(jì)4.1 REST接口設(shè)計(jì)RESTful風(fēng)格使用HTTP標(biāo)準(zhǔn)方法區(qū)分操作GET用于查詢POST新增PUT修改DELETE刪除。請(qǐng)求方法 接口路徑 功能說(shuō)明GET / 服務(wù)基礎(chǔ)信息POST /students 新增學(xué)生信息GET /students 獲取全部學(xué)生列表支持分頁(yè)關(guān)鍵詞搜索GET /students/{id} 根據(jù)id查詢單個(gè)學(xué)生詳情PUT /students/{id} 更新學(xué)生信息DELETE /students/{id} 刪除指定學(xué)生4.2 項(xiàng)目文件結(jié)構(gòu)plaintextapi/├─ main.py # 主程序包含F(xiàn)astAPI實(shí)例、數(shù)據(jù)庫(kù)邏輯、全部接口代碼├─ requirements.txt # 項(xiàng)目依賴庫(kù)清單├─ README.md # 項(xiàng)目說(shuō)明文檔倉(cāng)庫(kù)首頁(yè)展示└─ students.db # SQLite數(shù)據(jù)庫(kù)文件首次運(yùn)行自動(dòng)生成【截圖插入點(diǎn)1】插入AtomGit倉(cāng)庫(kù)項(xiàng)目結(jié)構(gòu)截圖你圖片里的項(xiàng)目結(jié)構(gòu)圖五、核心代碼實(shí)現(xiàn)5.1 依賴文件 requirements.txttxtfastapi0.110.0uvicorn[standard]0.29.0email-validator2.0.0安裝命令bashpip install -r requirements.txt5.2 main.py核心邏輯說(shuō)明main.py是項(xiàng)目唯一主文件整合數(shù)據(jù)庫(kù)初始化、數(shù)據(jù)模型定義、全部接口代碼。1. 導(dǎo)入fastapi、pydantic、sqlite3等庫(kù)創(chuàng)建FastAPI應(yīng)用實(shí)例設(shè)置項(xiàng)目標(biāo)題描述。2. 數(shù)據(jù)庫(kù)初始化函數(shù)程序啟動(dòng)自動(dòng)連接sqlite創(chuàng)建student數(shù)據(jù)表不存在表時(shí)自動(dòng)新建。3. Pydantic模型定義學(xué)生數(shù)據(jù)模型完成字段校驗(yàn)例如age設(shè)置范圍0~150email自動(dòng)校驗(yàn)郵箱格式。4. 編寫(xiě)各個(gè)接口函數(shù)- POST /students接收前端提交學(xué)生數(shù)據(jù)校驗(yàn)無(wú)誤寫(xiě)入數(shù)據(jù)庫(kù)。- GET /students讀取數(shù)據(jù)庫(kù)支持page、page_size分頁(yè)keyword關(guān)鍵詞模糊匹配。- GET /students/{sid}按id查詢單條學(xué)生記錄。- PUT /students/{sid}根據(jù)id更新學(xué)生信息支持局部更新。- DELETE /students/{sid}刪除對(duì)應(yīng)id學(xué)生。5. 主程序入口使用uvicorn啟動(dòng)web服務(wù)?!窘貓D插入點(diǎn)2】可以粘貼main.py代碼片段或者放Swagger接口頁(yè)面截圖六、項(xiàng)目功能測(cè)試6.1 項(xiàng)目啟動(dòng)安裝依賴后執(zhí)行啟動(dòng)命令bashpython main.py服務(wù)默認(rèn)地址 http://0.0.0.0:8000- Swagger文檔地址 http://127.0.0.1:8000/docs- ReDoc文檔 http://127.0.0.1:8000/redoc- OpenAPI JSON http://127.0.0.1:8000/openapi.json【截圖插入點(diǎn)3】插入Swagger頁(yè)面截圖展示全部接口列表6.2 使用curl命令測(cè)試接口快速體驗(yàn)在終端可以直接執(zhí)行curl命令調(diào)用接口README文檔中已經(jīng)提供示例1. 新增學(xué)生bashcurl -X POST http://localhost:8000/students \-H Content-Type: application/json \-d {name:張三,age:18,gender:男,email:zhangsanexample.com,phone:13800000001}2. 獲取學(xué)生列表分頁(yè)bashcurl http://localhost:8000/students?page1page_size103. 關(guān)鍵詞搜索學(xué)生bashcurl http://localhost:8000/students?keyword張三4. 查詢單個(gè)學(xué)生bashcurl http://localhost:8000/students/15. 修改學(xué)生信息bashcurl -X PUT http://localhost:8000/students/1 \-H Content-Type: application/json \-d {age:19,phone:13800000002}6. 刪除學(xué)生bashcurl -X DELETE http://localhost:8000/students/1【截圖插入點(diǎn)4】插入README快速體驗(yàn)curl命令截圖6.3 Swagger網(wǎng)頁(yè)在線測(cè)試打開(kāi) /docs 頁(yè)面點(diǎn)擊任意接口的Try it out填入?yún)?shù)點(diǎn)擊Execute直接發(fā)送請(qǐng)求并查看返回結(jié)果。測(cè)試驗(yàn)證新增、查詢、修改、刪除全部功能參數(shù)校驗(yàn)生效非法輸入會(huì)返回報(bào)錯(cuò)。七、AtomGit云倉(cāng)庫(kù)部署項(xiàng)目代碼全部上傳AtomGit云倉(cāng)庫(kù)倉(cāng)庫(kù)地址 atomgit.com/zhaojingab/api倉(cāng)庫(kù)內(nèi)文件清單1. main.py項(xiàng)目主代碼2. requirements.txt依賴庫(kù)3. README.md項(xiàng)目說(shuō)明文檔倉(cāng)庫(kù)首頁(yè)展示包含目錄、功能介紹、安裝步驟、curl示例、接口表格4. students.dbSQLite數(shù)據(jù)庫(kù)文件倉(cāng)庫(kù)創(chuàng)建完成后生成個(gè)人訪問(wèn)令牌令牌名稱、令牌密鑰用于作業(yè)表格填寫(xiě)。倉(cāng)庫(kù)README.md編寫(xiě)完整項(xiàng)目說(shuō)明帶目錄學(xué)生信息管理API、功能特性、安裝依賴、啟動(dòng)服務(wù)、訪問(wèn)文檔、接口說(shuō)明、快速體驗(yàn)、項(xiàng)目結(jié)構(gòu)和截圖內(nèi)容一致?!窘貓D插入點(diǎn)5】插入AtomGit倉(cāng)庫(kù)README首頁(yè)截圖八、項(xiàng)目總結(jié)與學(xué)習(xí)心得8.1 項(xiàng)目成果本項(xiàng)目成功實(shí)現(xiàn)一套基于FastAPISQLite的學(xué)生信息管理RESTful API完成完整CRUD功能附帶分頁(yè)、模糊檢索、參數(shù)校驗(yàn)自動(dòng)生成Swagger接口文檔。項(xiàng)目代碼托管AtomGit云倉(cāng)庫(kù)文檔齊全滿足信息安全課程云倉(cāng)庫(kù)作業(yè)全部審核標(biāo)準(zhǔn)①具備項(xiàng)目代碼文件②README.md項(xiàng)目說(shuō)明③Python項(xiàng)目附帶requirements.txt庫(kù)說(shuō)明。整個(gè)項(xiàng)目實(shí)現(xiàn)前后端分離的后端接口開(kāi)發(fā)熟悉RESTful API設(shè)計(jì)規(guī)范掌握FastAPI框架開(kāi)發(fā)流程理解SQLite嵌入式數(shù)據(jù)庫(kù)的使用學(xué)會(huì)使用AtomGit代碼倉(cāng)庫(kù)管理項(xiàng)目代碼練習(xí)接口測(cè)試方式curl、Swagger。8.2 項(xiàng)目不足1. SQLite適合小型項(xiàng)目并發(fā)訪問(wèn)性能弱不適合高并發(fā)生產(chǎn)環(huán)境。2. 沒(méi)有實(shí)現(xiàn)用戶登錄、身份鑒權(quán)任何人都可以直接調(diào)用接口修改刪除數(shù)據(jù)缺少權(quán)限控制。3. 沒(méi)有日志記錄功能接口調(diào)用行為無(wú)法留存審計(jì)日志在信息安全場(chǎng)景缺少審計(jì)能力。8.3 拓展優(yōu)化方向后續(xù)可以對(duì)項(xiàng)目進(jìn)行升級(jí)1. 增加JWT令牌身份認(rèn)證接口增加訪問(wèn)權(quán)限控制區(qū)分管理員和普通用戶。2. 增加操作日志記錄每一次接口調(diào)用行為滿足安全審計(jì)需求。3. 更換MySQL數(shù)據(jù)庫(kù)提升并發(fā)能力適配多用戶訪問(wèn)場(chǎng)景。4. 增加異常捕獲、全局統(tǒng)一返回格式優(yōu)化錯(cuò)誤處理。結(jié)束語(yǔ)本次課程項(xiàng)目從需求分析、接口設(shè)計(jì)、代碼編寫(xiě)、功能測(cè)試到代碼上傳AtomGit云倉(cāng)庫(kù)完整走完后端API項(xiàng)目開(kāi)發(fā)全流程。FastAPI框架憑借自動(dòng)接口文檔、強(qiáng)大參數(shù)校驗(yàn)極大簡(jiǎn)化后端接口開(kāi)發(fā)工作。通過(guò)本次實(shí)踐我加深理解REST接口開(kāi)發(fā)、輕量數(shù)據(jù)庫(kù)使用、代碼版本托管等后端開(kāi)發(fā)知識(shí)鞏固信息安全專業(yè)Web后端相關(guān)基礎(chǔ)為后續(xù)學(xué)習(xí)Web安全、接口滲透測(cè)試打下基礎(chǔ)。