Python程式員Visual Studio Code指南5調試

来源:https://www.cnblogs.com/testing-/p/17640620.html
-Advertisement-
Play Games

隨著B端業務快速發展,系統愈趨複雜。我們發起了B端架構升級專項,基於B端業務的特點,從研發規範建設、B端架構基建、系統架構升級和落地保障等多方面提升了B端的架構水平 ...


5 調試

當運行程式時終端輸出錯誤時,可以參考編輯器中的"問題"面板來解決遇到的問題。不過,並非所有錯誤都會導致錯誤。可能出現的情況是,程式執行成功,但輸出結果與預期不同。出現這種情況時,下一步就是找出程式中的錯誤。這個過程被稱為調試。

您可以嘗試通過註釋代碼行(從而禁止代碼塊運行)、添加更多列印語句以在代碼塊執行後輸出,或修改程式中的行來定位和解決問題。雖然每種方法都能幫助你找出錯誤和可能的修複方法,但這一過程效率很低。

Visual Studio Code有內置調試器,它的功能通過Python擴展得到了進一步擴展。雖然調試器可以幫助您識別和修複錯誤,但您仍有責任識別錯誤可能出現在代碼的哪個位置。一旦你確定了錯誤的潛在位置,就可以使用調試器來幫助你跟蹤程式的執行狀態。

5.1 啟動調試

要讓調試器在執行過程中暫停,必須在代碼的某一行設置斷點。只要你想檢查程式的運行狀態,然後逐行檢查代碼,就可以設置斷點。在 Visual Studio 代碼中,斷點會以紅點的形式出現在編輯器空白處。當調試會話開始時,調試器會執行到斷點為止的所有代碼行,並高亮顯示要執行的下一行。(如果是步進操作,則例外,這將在後面的 "調試命令 "一節中解釋)。

要添加斷點,請將滑鼠懸停在當前代碼行的編輯器邊框上,然後單擊以添加斷點。或者,使用鍵盤快捷鍵F9來添加當前代碼行。要移除斷點,請在編輯器空白處選擇斷點,或再次按F9鍵。也可以在頂部菜單中選擇運行,然後選擇移除所有斷點,從而移除所有斷點。

你可以在會話期間暫停調試器的任何位置調用debugypy.breakpoint()來強制設置斷點。如果要強制設置斷點,必須在代碼中導入debuypy。調用後,調試器會停止下一行代碼。這種方法會在程式中硬編碼斷點。如果你有一些非同步的回調函數,而你又不想用其他斷點來設置、清除、啟用或禁用它們,那麼這種方法可能會很有用。通過對幾個斷點進行硬編碼,就能在回調函數發生時捕捉到它們。

您可以通過以下方式啟動調試會話:

  • 菜單: 選擇運行 ➪ 啟動調試。
  • 鍵盤快捷鍵: 按 F5。
  • 運行視圖: 單擊運行和調試

  • 運行視圖: 單擊 "開始調試"(在調試會話啟動後出現)

編輯器在調試會話期間的行為由調試配置控制。調試配置是調試器功能的設置列表。Python 擴展提供了幾種配置,稍後將在 "啟動配置 "中探討。本章練習中出現提示時,點擊 Python 文件配置,調試當前活動的 Python 文件。

啟動調試會話後,會打開運行視圖。運行視圖用於管理調試會話。當調試會話處於活動狀態時,"運行 視圖中的面板會根據正在執行的內容動態變化。

當代碼中添加斷點時,斷點面板會將模塊名稱(如times_two.py)及其相應的斷點行添加到列表中。目前times_two.py 中有兩個斷點,一個在第4行,另一個在第6行。在斷點面板中選擇其中一個斷點,編輯器就會高亮顯示該斷點。

假設你在程式中設置了多個斷點。在調試時,你決定在會話中只選擇一些斷點,這樣就不必在每個斷點都暫停調試器了。移除不需要的斷點會刪除斷點,如果你打算在後續調試會話中保留斷點,這可能不是你的本意。相反,你可以禁用斷點。在 "斷點"面板中,取消選中斷點旁邊的方框即可禁用斷點。或者,你也可以右鍵單擊斷點,然後單擊禁用斷點。如果想一次性禁用所有斷點,可以單擊"停用斷點"按鈕。不過,如果您想刪除所有斷點,請單擊"刪除斷點"按鈕。刪除所有斷點有助於確保清除程式中設置的所有斷點。

調試器運行時,變數的當前狀態會反映在變數面板中。變數面板將變數分為局部和全局範圍。

在繼續調試的過程中,請註意麵板中變數的變化情況。雖然變數會隨著程式的執行而填充,但變數值有可能會產生錯誤,從而導致代碼停止執行。如果你發現換一個值就能繼續執行程式,你可以在變數面板中更改該值。要更改數值,請選中變數並按Enter鍵。輸入新變數後,再按一次Enter鍵,將修改後的值保存到程式狀態中。

5.2 調試命令

除運行視圖外,編輯器中還會出現調試工具欄(見圖 5.9)。調試工具欄提供了對這些調試命令的快速訪問:

  • A—Continue (F5)
  • B—Step Over (F10)
  • C—Step Into (F11)
  • D—Step Out (Shift+F11)
  • E—Restart (Shift+Cmd/Ctrl+F5)
  • F—Stop (Shift+F5)

調試命令是一起工作的,而不是獨立的;也就是說,你通常要使用多種命令的組合來調試不同的代碼行。

除調試工具欄命令外,編輯器右鍵上下文菜單中還提供了其他命令。這些功能包括

  • 添加內聯斷點(Add Inline Breakpoint)-在代碼中添加斷點,特別是在游標下的代碼中。這對單個語句中的複合表達式非常有用,因為您希望在表達式的特定部分斷開。或者,您可以導航到運行 ➪ 新斷點 ➪ 內聯斷點,或者使用鍵盤快捷鍵 Shift+F9。
  • 運行到游標(Run to Cursor)-運行一段代碼而不設置另一個斷點。
  • 跳轉到游標(Jump to Cursor)-跳轉代碼行或返回並重覆代碼行。

5.2.1 Continue

當調試器停在某個斷點時,單擊"繼續(Continue)"會運行該斷點後的所有代碼,直到下一個斷點或程式結束。

5.2.2 Step Over

Step Over命令運行調試器當前暫停的代碼行,然後自動暫停到下一行,無需另設斷點。如果當前行是函數調用,調試器將運行整個函數,然後在函數調用後的下一行暫停。從本質上講,Step Over命令是在當前範圍內逐行進行調試。

試試看 運行調試器,逐行查看代碼。註意,當調試器運行到 times_two() 函數定義處時,調試器的下一步是 print() 語句。

5.2.3 Step Into

當調試器在函數處暫停時,Step Into 命令會進入函數作用域。在這裡,你可以查看函數作用域內的每一行,還能進入其他函數調用。

5.2.4 Step Out

如果發現自己想從函數內部退出到調用該函數的作用域,可以使用Step Out命令。

5.2.5 停止

在調試會話期間,可以使用Stop命令停止所有執行。停止會話會停止調試器,但不會結束程式。如果在調試會話期間發現了程式中的錯誤,並得出結論:如果繼續執行,可能會產生影響程式的副作用,例如覆蓋錯誤的文件。在這種情況下,請選擇停止命令退出調試器。

5.2.5 重新啟動

在調試和糾正程式中的錯誤時,你往往不想繼續在當前(通常是錯誤的)狀態下運行程式。這時,你需要停止執行並重新啟動調試程式。重啟(Restart)命令可以方便地停止調試器,保存當前文件,然後用最近的修改重新啟動調試器。

參考資料

5.3 調用堆棧

模塊及其函數調用被稱為框架。幀相互堆疊,當函數返回時,相應的幀會從堆棧中清除。以times_two.py程式為例,模塊框架位於棧的底部,而times_two()函數框架位於棧的頂部。如果times_two()函數進行函數調用,被調用的函數將位於棧頂。調用棧本身被稱為調用棧。

調試視圖中的調用棧面板顯示了導致當前執行點的整個函數調用鏈。調用棧面板列出了正在調試的文件和文件中正在運行的行。如果調用經過項目中的其他文件,調用堆棧尤其有用,因為調用堆棧會記錄你在調試鏈中的位置。

此外,如果處於斷點處,可以選擇調用堆棧中的某一幀,變數面板會顯示堆棧中該斷點處的程式狀態。這對於通過堆棧和生成該值的所有代碼追溯錯誤值的源頭非常有用。

逐行查看代碼,直到調用times_two()函數。進入函數並註意調用堆棧。現在,times_two()框架已添加到調用堆棧中

調試器完成函數調用並返回總數後,times_two()框架將從調用棧面板中清除。

5.4 條件斷點(Logpoints)

你可以配置斷點,使其在特定條件為真時觸發(條件斷點),或在斷點被觸發一定次數後觸發。

當你為斷點指定的表達式求值為真時,條件斷點就會斷開。例如,如果要調試資料庫中的數據,可以在出現特定記錄時中斷。

命中計數使調試器能夠執行到指定的出現次數。Python擴展支持的命中計數是前面帶有 、>、>=、<、<= 和 % 操作符的整數。參考資料庫示例,假設您發現一個錯誤在進程的第 1500 次迭代時發生。與其每次迭代都進行到第 1500 次,不如設置當 1500 時斷開。

要添加條件斷點,請右鍵單擊相應行的編輯器邊距,然後單擊添加條件斷點。在出現的下拉菜單中,也可以使用相同的下拉菜單添加命中計數。

5.4 日誌點(Logpoints)

日誌點會向調試控制台輸出一條信息,而不會中斷調試器。日誌點在編輯器空白處顯示為菱形。

要添加日誌點,右鍵單擊相應行的編輯器頁邊空白處,然後單擊添加日誌點。雖然日誌信息是純文本,但也可以在大括弧中加入要評估的表達式。寫完信息後按Enter。

5.5 監視(Watch)

當程式只有幾個變數時,變數面板可能足以跟蹤變數狀態。但是,如果程式中有幾十個甚至上百個變數,該怎麼辦呢?如何關註單個變數受所有正在執行的程式的影響就變得很麻煩。

如果你想在不使用變數面板的情況下關註一個(或多個)變數,可以將該變數添加到觀察面板。當調試器運行時,觀察面板會跟蹤所選變數的狀態。該面板將表達式作為輸入,併在每一行代碼執行時更新變數。要在觀察面板中添加變數,請單擊 "添加表達式 "並輸入變數名。或者,也可以在編輯器中突出顯示變數,右鍵單擊,然後單擊添加到觀察。

試試看 在編輯器中打開watch.py,在greeting = ' Hello World'處設置斷點,然後啟動調試器。調試器在斷點處暫停後,將變數total添加到 Watch 面板。

查看代碼的每一行,註意變數賦值在代碼執行過程中的變化。

註意 當調試器啟動時,total 的值反映 NameError: name 'total' is not defined(名稱'total'未定義)。出現這種情況的原因是程式尚未執行定義變數的代碼行。一旦程式執行 total = 0,變數值就會更新為 0。 如果同一變數名在調用棧的不同位置使用(例如不同作用域),則以最新的變數名為準。當幀退出並從堆棧中移除時,Watch 面板會顯示下一個最高作用域中的變數值。

watch.py 中有六個變數:greeting、total、iteration、numbers、num 和 iteration_num。當調試器走過程式的每一行時,列表就會增加,以包括執行的每個變數。當調試器走過每一行代碼時,你可以通過查看觀察面板更好地關註總計的狀態。

5.6 調試控制台(The Debug Console)

調試程式時,您可以在調試控制臺中嘗試潛在的錯誤修複方法,而不是修改代碼後重新啟動。通過調試控制台,您可以在程式當前狀態下嘗試代碼,而無需停止調試器。您可以在調試控制臺中嘗試不同的方案,併在調試器暫停時將修正結果複製到程式中。

調試控制台在編輯器中提供了Python讀取-評估-列印-迴圈 (REPL Read-Eval-Print-Loop) 功能。通過調試控制台,您可以訪問和修改程式的所有變數,調用函數,求值表達式,以及使用程式的當前狀態運行任何您喜歡的代碼。控制臺中的任何操作都會影響程式的當前狀態。此外,調試控制台輸入支持語法著色、縮進、自動關閉引號以及活動編輯器模式的其他語言特性。

您可以通過以下三種方式訪問調試控制台:

  • 運行視圖: 單擊調試控制台圖標。

  • 鍵盤快捷鍵: 按 Cmd/Ctrl+Shift+Y。

  • 主菜單: 查看 -> 調試控制台。

調試控制台會在您輸入時顯示建議。按Enter鍵後,表達式將被評估。要輸入多行,請在兩行之間按下Shift+Enter 鍵。

在調試控制臺中,可以直接調用函數並評估結果。如果調用的函數有斷點,則可以逐步查看函數代碼。退出函數後,你仍然處於與之前相同的程式狀態。你還可以使用調試控制台更改變數,運行程式中沒有的代碼。

試用:在編輯器中打開Fibonacci_generator.py文件。Fibonacci_generator.py文件包含生成斐波那契數字列表的程式。斐波那契數構成一個序列,序列中的下一個數字是序列中前兩個數字之和(例如 1、1、2、3、5、8、13、21)。程式啟動時,會提示用戶輸入程式應生成的數字總數。為了演示調試控制台,故意在程式中添加了一個錯誤。請按照以下說明使用調試控制台修複錯誤:

  • 在終端運行程式,根據提示輸入1作為要生成的斐波納契數。程式成功運行並返回 [1]。
  • 再次在終端運行程式,根據提示輸入2作為要生成的斐波那契數。程式成功運行並返回 [1,2]。
  • 再次在終端運行程式,根據提示輸入要生成的斐波那契數 3。這次程式運行時停滯了。在鍵盤上按 Ctrl+C 退出程式。退出程式後,終端會出現一個錯誤:
How many Fibonacci numbers would you like to generate? 3
^CTraceback (most recent call last):
  File "/home/andrew/code/Code_Samples/Code Samples/debugger/Fibonacci_generator.py", line 18, in <module>
    print(gen_fib())
  File "/home/andrew/code/Code_Samples/Code Samples/debugger/Fibonacci_generator.py", line 12, in gen_fib
    while i < (count - 1):
KeyboardInterrupt

在計數 > 2 時的 elif 語句中,i == 1 似乎有問題。可以認為程式中的錯誤就出在這裡。

  • 在i == 1處設置斷點並啟動調試器。出現提示時,輸入3。

調試器在斷點處暫停後,查看變數面板,確認變數是否反映了適當的值。

  • Step over到 while 迴圈的最後一行

註意到儘管已經生成了所需的斐波納契數,迴圈仍開始了另一次迭代。繼續跳過 while 迴圈,程式會生成相同的斐波納契數,而且 while 迴圈從未中斷過。該程式是一個無限迴圈。

  • 啟動調試器並打開調試控制台

調試器在斷點處停止後,輸入i+=1 以遞增 i 的值。
在變數面板中,i 的值從 1 變為 2。 現在,繼續調試程式時,執行代碼的其餘部分,只生成三個斐波那契數字。

5.7 啟動配置

啟動配置可讓你配置不同調試會話的運行方式,並將這些配置持久保存在 launch.json 文件中。launch.json 文件保存在項目根目錄下的 .vscode 文件夾中,也可在用戶或工作區設置中訪問。要進行調試,launch.json 文件中至少需要一個配置。

要創建 launch.json 文件,請在運行視圖中單擊創建 launch.json 文件。或者,你也可以從 "運行 "菜單中選擇 "運行" ➪ "打開配置 "來創建 launch.json 文件。

Visual Studio Code會從命令面板打開配置菜單,提示您選擇預設配置作為新配置的啟動模板。

Python 擴展提供了以下預設配置:

  • Python 文件-調試當前活動的 Python 文件。
  • 模塊-通過使用 -m 調用 Python 模塊來調試該模塊。
  • 遠程連接-為調試伺服器監聽提供主機名和埠號。
  • 使用進程 ID 附加-當運行在 Visual Studio Code 之外啟動的 Python 腳本時,將調試器附加到非調試模式下的 Python 進程。附加到進程需要進程 ID。

該擴展還為網路應用程式提供了三種預設配置:

  • Django
  • Flask
  • Pyramid

要瞭解有關調試Django應用程式的更多信息,請參閱代碼.visualstudio.com/docs/python/tutorial-django#_explore-the-debugger 的Django教程。要瞭解有關調試 Flask 應用程式的更多信息,請參閱位於 code.visualstudio.com/docs/python/tutorial-flask#_run-the-app-in-the-debugger 的 Flask 教程。

選擇啟動模板後,launch.json文件將添加到 .vscode 文件夾中,併在編輯器中打開。

編輯 launch.json 文件時,IntelliSense 會提示(Ctrl+空格鍵)可用屬性列表。您也可以對文件中的所有屬性使用懸停幫助。由於不同語言的屬性可能不同,使用懸停幫助可以瞭解有關屬性的更多信息。

launch.json 文件可以包含任意數量的配置。要添加配置,請從運行菜單或 launch.json 編輯器中單擊添加配置。

這裡提供了 launch.json 文件可用的核心設置:

  • name -為出現在 Visual Studio 代碼下拉列表中的調試配置提供名稱。
  • type-指定要使用的調試器類型;對於 Python 代碼,將其設置為 python。
  • request-指定開始調試的模式:
    • launch: 在程式中指定的文件上啟動調試器。
    • attach(附加): 將調試器附加到遠程伺服器上已經運行的進程上,該進程不能隨意重啟。本地需要與程式中指定的相同的源代碼文件。
  • program-提供 Python 程式入口模塊(啟動文件)的完整路徑。預設配置中經常使用的 ${file} 值,會使用編輯器中的當前活動文件。通過指定啟動文件,可以確保無論打開哪個文件,都能以相同的入口點啟動程式。
  • python- 指向用於調試的 Python 解釋器的完整路徑。如果未指定,則預設使用 python.pythonPath 設置中指定的解釋器,相當於使用 ${config:python.pythonPath} 值。要使用其他解釋器,請在調試配置的 python 屬性中指定其路徑。
  • args-指定傳遞給程式的參數。參數字元串中以空格分隔的每個元素都應包含在引號中。
  • cwd-指定調試器的當前工作目錄,它是代碼中使用的任何相對路徑的基本文件夾。如果省略,當前工作目錄預設為${workspaceFolder},即編輯器中打開的文件夾。或者,也可以使用在每個平臺上定義的自定義環境變數,其中包含要使用的 Python 解釋器的完整路徑,這樣就不需要額外的文件夾路徑了。

其他配置請訪問 code.visualstudio.com/docs/python/debugging#_set-configuration-options。還有一些非Python 特有的附加屬性,可以在 launch.json 中設置。要瞭解更多信息,請參閱 code.visualstudio.com/docs/editor/debugging#_launchjson-attributes。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 我們已經介紹了radash的相關信息和部分Array相關方法,詳情可前往主頁查看; 本篇我們繼續介紹radash中Array的相關方法; 下期我們將介紹解析radash中剩餘的 Array相關方法,並整理出Array方法使用目錄,包括文章說明和腦圖說明。 Radash的Array相關方法詳解 ...
  • 大家好,我是 Java陳序員。 今天,給大家介紹一個基於 Vue 全家桶實現的“網易雲”播放器。 關註微信公眾號:【Java陳序員】,獲取開源項目分享、AI副業分享、超200本經典電腦電子書籍等。 項目介紹 YesPlayMusic —— 一款高顏值的第三方網易雲播放器,支持 Windows / ...
  • 本文分享自華為雲社區《3月閱讀周·你不知道的JavaScript | ES6生成器,看似同步的非同步流程式控制製表達風格》,作者: 葉一一。 生成器 打破完整運行 JavaScript開發者在代碼中幾乎普遍依賴的一個假定:一個函數一旦開始執行,就會運行到結束,期間不會有其他代碼能夠打斷它並插入其間。 ES ...
  • 目錄一、爬取目標1.1 效果截圖1.2 演示視頻1.3 軟體說明二、代碼講解2.1 爬蟲採集模塊2.2 軟體界面模塊2.3 日誌模塊三、獲取源碼及軟體 一、爬取目標 用python開發的xhs爬蟲採集軟體,可自動抓取小紅書評論數據,並且含二級評論數據。 為什麼有了源碼還開發界面軟體呢?方便不懂編程代 ...
  • 1、 Pythonic - 很Python 寫一段代碼生成1到100之間的數字的平方的列表,答案是: 1, 4, 9, 16... 如果你這樣寫,你就不Pythonic了: 解釋 nums = [] for i in range(1, 101): nums.append(i*i) print(num ...
  • 拓展閱讀 MySQL View MySQL truncate table 與 delete 清空表的區別和坑 MySQL Ruler mysql 日常開發規範 MySQL datetime timestamp 以及如何自動更新,如何實現範圍查詢 MySQL 06 mysql 如何實現類似 oracl ...
  • C++ 解引用 獲取記憶體地址和值 在上一頁的示例中,我們使用了指針變數來獲取變數的記憶體地址(與引用運算符 & 一起使用)。但是,你也可以使用指針來獲取變數的值,這可以通過使用 * 運算符(解引用運算符)來實現: string food = "Pizza"; // 變數聲明 string* ptr = ...
  • 大家好,我是白夜,今天給大家聊聊面向對象的三大特征——封裝 一、包(package) 1.1、包的引入 先來看看我們之前寫的代碼結構 以上代碼存在的問題 所有類寫在一個目錄下麵,非常難管理,因為以後項目不可能只有這麼幾個類,當類數量很大的時候,就不容易管理了。 不能寫同名但是不同需求的類。 為瞭解決 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...