搜尋
首頁web前端js教程用node.js和express代碼您的第一個API:了解REST API

Code Your First API With Node.js and Express: Understanding REST APIs

REST 和RESTful API 簡介

在現代Web 開發中,你一定經常遇到REST 和API 這些術語。如果你聽說過這些術語或使用過API,但並不完全了解它們的工作原理或如何構建自己的API,那麼本系列教程正適合你。

本教程系列將首先概述REST 原則和概念。然後,我們將創建一個在Node.js Express 服務器上運行並連接到MySQL 數據庫的完整API。完成本系列教程後,你應該能夠自信地構建自己的API 或深入研究現有API 的文檔。

先決條件

為了充分利用本教程,你應該具備一些基本的命令行知識,了解JavaScript 的基礎知識,並在全局安裝了Node.js。

REST 和RESTful API 是什麼?

表述性狀態轉移( REST ) 描述了一種Web 服務的架構風格。 REST 包含一組用於在不同系統之間共享數據的標准或約束,實現REST 的系統被稱為RESTful。 REST 是一個抽象概念,而不是一種語言、框架或軟件類型。

一個關於REST 的鬆散類比是:保留黑膠唱片收藏與使用流媒體音樂服務。對於物理黑膠唱片收藏,必須完整復制每張唱片才能共享和分發副本。然而,對於流媒體服務,可以通過對某些數據(例如歌曲標題)的引用來永久共享相同的音樂。在這種情況下,流媒體音樂是一種RESTful 服務,而黑膠唱片收藏是一種非RESTful 服務。

API是應用程序編程接口,它是一個允許軟件程序相互通信的接口。 RESTful API只是一個遵循REST 原則和約束的API。在Web API 中,服務器通過URL 端點接收請求,並返回響應,響應通常是JSON 格式的數據。

REST 原則

六個指導性約束定義了REST 架構,如下所示:

  1. 統一接口: 組件的接口必須相同。這意味著使用URI 標準來標識資源——換句話說,可以輸入到瀏覽器地址欄中的路徑。
  2. 客戶端-服務器: 服務器(存儲和操作數據)和客戶端(請求和顯示響應)之間存在關注點分離。
  3. 無狀態交互: 關於每個請求的所有信息都包含在每個單獨的請求中,並且不依賴於會話狀態。
  4. 可緩存: 客戶端和服務器可以緩存資源。
  5. 分層系統: 客戶端可以連接到最終服務器,或中間層,例如負載均衡器。
  6. 按需代碼(可選) : 客戶端可以下載代碼,從而減少外部可見性。

請求和響應

你可能已經熟悉了所有網站的URL 都以https 開頭(安全版本)。超文本傳輸協議( HTTP ) 是互聯網上客戶端和服務器之間通信的方法。

我們最明顯地看到它在瀏覽器的URL 欄中,但HTTP 不僅可以用於從服務器請求網站。當你訪問Web 上的URL 時,你實際上是在執行GET 和其他類型的請求。

HTTP 通過打開到服務器端口(http、https) 的TCP (傳輸控制協議) 連接來發出請求,監聽服務器會返回狀態和正文。

請求必須包含URL、方法、標頭信息和正文。

請求方法

有四種主要的HTTP 方法,也稱為HTTP 動詞,通常用於與Web API 交互。這些方法定義了將對任何給定資源執行的操作。

HTTP 請求方法大致對應於CRUD範例,CRUD 代表創建、更新、讀取、刪除。儘管CRUD 指的是數據庫操作中使用的函數,但我們可以將這些設計原則應用於RESTful API 中的HTTP 動詞。

 <code>curl -i https://www.google.com</code>

Google 的服務器將返回以下內容:

 <code>HTTP/2 200 date: Sun, 21 Aug 2022 19:06:22 GMT expires: -1 cache-control: private, max-age=0 content-type: text/html; charset=ISO-8859-1 ...</code>

我們可以看到200 狀態代碼,以及HTTP 的版本(這將是HTTP/1.1、HTTP/2 或HTTP/3)。

由於此特定請求返回的是網站,因此為text/html。在RESTful API 中,你可能會看到對Google 的curl 請求(不包含google.com)返回301 響應,以指示應重定向資源。

REST API 端點

當在服務器上創建API 時,它包含的數據可以通過端點訪問。端點是可以接受和處理POST、DELETE 請求的請求的URL。

API URL 將由根、路徑和可選查詢字符串組成。

例如,要獲取ID 為5 的用戶,我們將使用/user/5。

REST API 約定

以下是構建RESTful API 時應遵循的一些約定:

  • 端點不應顯示文件擴展名: 儘管API 最有可能返回JSON,但URL 不應以.json 結尾。
  • 使用名詞而不是動詞: 例如,要添加用戶,我們應該使用/users 端點並使用POST 請求,而不是使用/users/add 端點。 API 應該開發為能夠處理對同一URL 的多種類型的請求。
  • 路徑區分大小寫,應使用小寫字母和連字符而不是下劃線: 例如,/users-list 比/users_list 更可取。

所有這些約定都是指導原則,因為沒有嚴格的REST 標準可供遵循。但是,使用這些指導原則將使你的API 一致、熟悉且易於閱讀和理解。

REST 的替代方案

REST 是一種很棒的工具,但有一些替代方案可以在某些情況下提供幫助。

SOAP

SOAP(簡單對象訪問協議)是1998 年創建的API,在REST 之前非常流行。它們之間存在一些主要區別。首先,SOAP 對響應格式的限制要嚴格得多。其次,SOAP 使用XML 而不是JSON,這對於遺留應用程序可能很有用,但通常比等效的JSON 更大更複雜。最後,雖然SOAP 可以很好地與HTTP 配合使用,但它也支持SMTP 等協議。

GraphQL

GraphQL 是Facebook 創建的一種較新的API 格式,它旨在通過允許客戶端準確地告訴服務器它需要什麼數據來減少獲取數據所需的HTTP 請求數量。 GraphQL 不使用URL 路徑,而是具有自定義語法來定義客戶端需要什麼數據,以便客戶端在一個請求中獲得所需的一切。

有關GraphQL 的精彩介紹,請查看本GraphQL 教程。

結論

在本文中,我們學習了REST 和RESTful API 是什麼,HTTP 請求方法和響應代碼如何工作,API URL 的結構以及常見的RESTful API 約定。在下一教程中,我們將學習如何通過使用Node.js 設置Express 服務器並構建我們自己的API 來將所有這些理論付諸實踐。

本文已更新,並包含Jacob Jackson 的貢獻。 Jacob 是一位Web 開發人員、技術作家、自由職業者和開源貢獻者。

以上是用node.js和express代碼您的第一個API:了解REST API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python vs. JavaScript:比較用例和應用程序Python vs. JavaScript:比較用例和應用程序Apr 21, 2025 am 12:01 AM

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C/C在JavaScript口譯員和編譯器中的作用C/C在JavaScript口譯員和編譯器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器