當(dāng)我們進(jìn)入 REST API 開發(fā)領(lǐng)域時(shí),Node.js 和 Express 脫穎而出,成為開發(fā)簡(jiǎn)單 REST API 端點(diǎn)的主要框架。從設(shè)置 server.js 文件作為起點(diǎn),到確保 Node.js 服務(wù)器針對(duì)可訪問的 API 端點(diǎn)主動(dòng)運(yùn)行,構(gòu)建 REST API 的過程是一項(xiàng)引人入勝的工作。

此過程的初始階段涉及建立適當(dāng)?shù)沫h(huán)境。這個(gè)初始設(shè)置類似于為建筑物奠定基礎(chǔ),為構(gòu)建我們的 API 提供穩(wěn)定的基礎(chǔ)。

第1步:搭建開發(fā)環(huán)境

此過程的初始階段涉及建立適當(dāng)?shù)沫h(huán)境。這個(gè)初始設(shè)置類似于為建筑物奠定基礎(chǔ),為構(gòu)建我們的 API 提供穩(wěn)定的基礎(chǔ)。在深入編碼方面之前,有必要準(zhǔn)備好您的開發(fā)環(huán)境。以下是幫助您入門的分步指南:

安裝 Node.js 和 npm

確保您的系統(tǒng)上安裝了 Node.js 和 npm(節(jié)點(diǎn)包管理器)。 Node.js 作為運(yùn)行時(shí)環(huán)境,而 npm 是包管理器,允許您安裝各種庫,包括 Express。

創(chuàng)建一個(gè)新項(xiàng)目

打開終端或命令提示符,導(dǎo)航到要在其中創(chuàng)建項(xiàng)目的文件夾,然后運(yùn)行:

mkdir my-rest-api
cd my-rest-api

初始化您的項(xiàng)目

初始化 Node.js 項(xiàng)目要?jiǎng)?chuàng)建包含有關(guān)項(xiàng)目及其依賴項(xiàng)的元數(shù)據(jù)的package.json文件,請(qǐng)運(yùn)行:

npm init -y

此命令創(chuàng)建一個(gè)具有默認(rèn)值的package.json文件。

 安裝快捷版

在項(xiàng)目目錄中,通過運(yùn)行以下命令使用 npm 安裝 Express:

npm install express

此命令將 Express 添加到項(xiàng)目的依賴項(xiàng)中,允許您開始構(gòu)建 REST API。

第 2 步:使用 Express 創(chuàng)建簡(jiǎn)單服務(wù)器

環(huán)境搭建完畢,讓我們使用 Express 創(chuàng)建一個(gè)簡(jiǎn)單的服務(wù)器。這涉及在傳統(tǒng)上名為server.js文件中編寫少量代碼,以啟動(dòng)服務(wù)器并偵聽請(qǐng)求。

創(chuàng)建server.js

在您的項(xiàng)目目錄中,創(chuàng)建一個(gè)名為server.js的文件。

 編寫服務(wù)器代碼

在文本編輯器中打開server.js并添加以下代碼:

// Import express
const express = require('express');

// Create an instance of express
const app = express();

// Define a port number
const port = 3000;

// Define a route for GET requests to '/'
app.get('/', (req, res) => {
res.send('Hello World! This is my first REST API.');
});

// Start the server
app.listen(port, () => {
console.log(Server running on http://localhost:${port}); });

此代碼片段執(zhí)行以下操作:

 運(yùn)行你的服務(wù)器

要啟動(dòng)服務(wù)器,請(qǐng)返回終端并運(yùn)行:

node server.js

您應(yīng)該看到一條消息,表明服務(wù)器正在運(yùn)行。打開 Web 瀏覽器并導(dǎo)航到http://localhost:3000 。您將收到以下消息:“Hello World!這是我的第一個(gè) REST API?!?/p>

很好,您剛剛設(shè)置了開發(fā)環(huán)境并使用 Express 創(chuàng)建了一個(gè)簡(jiǎn)單的服務(wù)器來為您的第一個(gè) REST API 端點(diǎn)提供服務(wù)!這構(gòu)成了您可以構(gòu)建更復(fù)雜的 API、根據(jù)需要添加更多路由和功能的基礎(chǔ)。

定義端點(diǎn)和 HTTP 方法

現(xiàn)在基礎(chǔ)工作已經(jīng)奠定,我們可以開始建設(shè)過程了。在 REST API 開發(fā)中,構(gòu)建從定義端點(diǎn)和 HTTP 方法開始,包括處理 HTTP 請(qǐng)求。要構(gòu)建 REST API,必須了解標(biāo)準(zhǔn) HTTP 方法 – GET、PUT、POST 和 DELETE – 因?yàn)檫@些是我們用來定義 CRUD(創(chuàng)建、讀取、更新、刪除)操作(包括處理刪除)端點(diǎn)的工具請(qǐng)求。這些方法與清晰直觀的端點(diǎn)相結(jié)合,提供了一個(gè)結(jié)構(gòu)化的界面,客戶可以使用該界面直觀地管理信息。

創(chuàng)建 REST API 不僅僅涉及設(shè)置服務(wù)器;還涉及到其他內(nèi)容。它需要定義特定的路徑(端點(diǎn))以及它們?nèi)绾雾憫?yīng)不同的 HTTP 請(qǐng)求。這對(duì)于執(zhí)行 CRUD 操作至關(guān)重要。讓我們深入研究如何使用 GET、POST、PUT 和 DELETE 等 HTTP 方法定義這些操作,并建立結(jié)構(gòu)化的請(qǐng)求和響應(yīng)系統(tǒng)。

GET 請(qǐng)求 – 讀取數(shù)據(jù)

 檢索所有項(xiàng)目

假設(shè)我們要檢索項(xiàng)目列表。我們使用 GET 請(qǐng)求來讀取數(shù)據(jù)。

   app.get('/items', (req, res) => {
// Assuming 'items' is our data array
res.json(items); // Send all items as response
});

POST 請(qǐng)求 – 創(chuàng)建數(shù)據(jù)

 添加新項(xiàng)目

要?jiǎng)?chuàng)建新項(xiàng)目,我們使用 POST 請(qǐng)求。這涉及從客戶端向服務(wù)器發(fā)送數(shù)據(jù)(在請(qǐng)求正文中)。

// Middleware to parse request body
app.use(express.json());

app.post('/items', (req, res) => {
const newItem = req.body; // Data sent from the client
items.push(newItem); // Add item to our data array
res.status(201).send('Item added.');
});

PUT 請(qǐng)求 – 更新數(shù)據(jù)

 更新現(xiàn)有項(xiàng)目

更新數(shù)據(jù)可以通過 PUT 請(qǐng)求來完成,并在端點(diǎn)中指定項(xiàng)目的 ID。

app.put('/items/:id', (req, res) => {
const id = req.params.id; // Get the item ID from the URL
const updatedItem = req.body; // Data for updating the item

// Logic to find and update the item by ID
const index = items.findIndex(item => item.id === id);
if (index !== -1) {
items[index] = updatedItem;
res.send('Item updated.');
} else {
res.status(404).send('Item not found.');
}
});

DELETE 請(qǐng)求 – 刪除數(shù)據(jù)

 刪除項(xiàng)目

為了刪除項(xiàng)目,使用 DELETE 請(qǐng)求,同時(shí)指定項(xiàng)目的 ID。

app.delete('/items/:id', (req, res) => {
const id = req.params.id; // Get the item ID from the URL

// Logic to find and remove the item by ID
const index = items.findIndex(item => item.id === id);
if (index !== -1) {
items.splice(index, 1);
res.send('Item deleted.');
} else {
res.status(404).send('Item not found.');
}
});

通過定義端點(diǎn)并適當(dāng)處理 HTTP 方法,我們?yōu)閺?qiáng)大的 REST API 奠定了基礎(chǔ),該 API 允許客戶端直觀地執(zhí)行 CRUD 操作。這種設(shè)置不僅使我們的 API 更加結(jié)構(gòu)化,還確保它可以無縫處理復(fù)雜的數(shù)據(jù)操作和交互。

構(gòu)造請(qǐng)求正文和響應(yīng)負(fù)載

在 REST API 中,來自客戶端的請(qǐng)求和來自服務(wù)器的響應(yīng)通常都使用 JSON(JavaScript 對(duì)象表示法)作為正文結(jié)構(gòu)。這種格式易于人類閱讀和編寫,也易于機(jī)器解析和生成。

使用 JSON 可確保數(shù)據(jù)發(fā)送和接收方式的一致性,使 API 使用起來更加直觀。此外,在響應(yīng)中設(shè)置適當(dāng)?shù)臓顟B(tài)代碼(例如 200 表示成功,201 表示已創(chuàng)建,404 表示未找到)有助于客戶端了解其請(qǐng)求的結(jié)果。

通過避免不必要的數(shù)據(jù)并謹(jǐn)慎地利用嵌套數(shù)據(jù)結(jié)構(gòu)可以防止處理延遲和潛在錯(cuò)誤。這需要仔細(xì)考慮每個(gè) API 調(diào)用所需的數(shù)據(jù),確保請(qǐng)求或響應(yīng)中發(fā)送的每個(gè) JSON 對(duì)象僅包含該特定交互所需的數(shù)據(jù)。避免過于復(fù)雜或深層嵌套的結(jié)構(gòu)有助于保持清晰度并有助于提高 API 的處理速度。

為請(qǐng)求和響應(yīng)數(shù)據(jù)建立架構(gòu)非常重要。該模式充當(dāng)定義 API 交換中數(shù)據(jù)元素的格式、類型和約束的契約。利用模式不僅有助于驗(yàn)證數(shù)據(jù),還可以作為預(yù)期數(shù)據(jù)模型的文檔,這對(duì) API 開發(fā)人員和消費(fèi)者都非常有益。

除了結(jié)構(gòu)之外,請(qǐng)求正文和響應(yīng)負(fù)載中處理數(shù)據(jù)的方式也會(huì)顯著影響 API 的性能和可用性。例如,響應(yīng)負(fù)載中的分頁可以通過將大型數(shù)據(jù)集分解為更小、更易于管理的塊來幫助管理它們。這提高了客戶端消費(fèi)和處理數(shù)據(jù)的能力,以及網(wǎng)絡(luò)上數(shù)據(jù)傳輸?shù)男省?/p>

總體而言,請(qǐng)求正文和響應(yīng)負(fù)載的周到結(jié)構(gòu)是 RESTful API 設(shè)計(jì)的一個(gè)關(guān)鍵方面,有助于創(chuàng)建健壯、可擴(kuò)展且用戶友好的 API。

設(shè)計(jì)直觀且可擴(kuò)展的 REST API

與任何設(shè)計(jì)過程非常相似,API 設(shè)計(jì)的目標(biāo)是開發(fā)不僅可操作、而且直觀且能夠擴(kuò)展的東西。例如,水平擴(kuò)展是比垂直擴(kuò)展更好的方法,可以維護(hù)可擴(kuò)展和高性能的 API。

在 HTTP 和 API 請(qǐng)求處理管道中合并緩存層有助于維持 API 性能。

RESTful API 中的數(shù)據(jù)處理

Data Handling in RESTful APIs

數(shù)據(jù)是 API 的核心,其高效管理對(duì)于 RESTful API 的成功至關(guān)重要。 JSON(JavaScript 對(duì)象表示法)是與 RESTful API 交互時(shí)常用的標(biāo)準(zhǔn)化數(shù)據(jù)格式之一。

數(shù)據(jù)建模對(duì)于識(shí)別數(shù)據(jù)結(jié)構(gòu)及其相互關(guān)系至關(guān)重要,JSON 與數(shù)據(jù)建模一起支持 RESTful API 中的高效操作。

確定資源表示

在 REST API 領(lǐng)域內(nèi),資源的表示至關(guān)重要。使用復(fù)數(shù)名詞來表示 REST API 端點(diǎn)中的資源,使 API 對(duì)于與之交互的人來說更加直觀。這些端點(diǎn)或 URL 代表 Web 服務(wù)中的資源,允許對(duì)這些資源執(zhí)行創(chuàng)建、讀取、更新和刪除等操作。

通過精心構(gòu)建數(shù)據(jù)、定義清晰的資源表示以及管理數(shù)據(jù)傳輸格式,開發(fā)人員為強(qiáng)大的 Web 服務(wù)奠定了基礎(chǔ)。這個(gè)過程需要關(guān)注細(xì)節(jié)并深入了解 Web 標(biāo)準(zhǔn),但回報(bào)(可擴(kuò)展、高效且用戶友好的 API)非常值得付出努力。

管理數(shù)據(jù)傳輸和格式

管理數(shù)據(jù)傳輸和選擇正確的數(shù)據(jù)格式與確定資源表示同樣重要。例如,Last-Modified 標(biāo)頭用于內(nèi)容協(xié)商,以指示相關(guān)資源上次更改的時(shí)間,這對(duì)于數(shù)據(jù)傳輸管理至關(guān)重要。

強(qiáng)大的錯(cuò)誤處理策略

可靠的 API 開發(fā)的基礎(chǔ)在于強(qiáng)大的錯(cuò)誤管理。實(shí)施正確的 HTTP 狀態(tài)代碼和詳細(xì)的錯(cuò)誤消息可以幫助工程師快速識(shí)別問題。此外,將所有異常映射到錯(cuò)誤負(fù)載中,描述錯(cuò)誤的根源并提供有關(guān)如何解決錯(cuò)誤的指導(dǎo),從而在意外情況下提供更清晰的反饋。

保護(hù)您的 RESTful API

安全性對(duì)于每一項(xiàng)數(shù)字化事業(yè)(包括 API 開發(fā))都至關(guān)重要。實(shí)施 OAuth 2.0 等身份驗(yàn)證和授權(quán)協(xié)議對(duì)于 RESTful API 的安全至關(guān)重要。 SSL/TLS 加密和細(xì)粒度訪問控制等其他安全措施補(bǔ)充了 API 密鑰的使用,以保護(hù)敏感信息。

通過緩存技術(shù)提高性能

為了提高 API 性能,緩存是一個(gè)有影響力的工具。使用 Redis 和 apicache 等數(shù)據(jù)緩存解決方案可以改善整體體驗(yàn),更快地提供經(jīng)常請(qǐng)求的資源,并減少數(shù)據(jù)庫查詢。

Cache-Control 標(biāo)頭用于管理緩存響應(yīng)的持續(xù)時(shí)間和位置,包括使用前的驗(yàn)證。

REST API 的測(cè)試工具和實(shí)踐

如果沒有完整的測(cè)試過程,API 開發(fā)就是不完整的。 Rspec、API Fortress 和 Postman 等自動(dòng)化測(cè)試框架可以增強(qiáng)測(cè)試過程,從而實(shí)現(xiàn)結(jié)構(gòu)化、可擴(kuò)展、可重用和可維護(hù)的測(cè)試。

在測(cè)試 REST API 之前,了解 API 要求(包括查詢參數(shù)的使用)對(duì)于正確的測(cè)試數(shù)據(jù)和驗(yàn)證方法準(zhǔn)備至關(guān)重要。

記錄您的 API 以實(shí)現(xiàn)最大可用性

文檔是消費(fèi)者與 API 的初始交互點(diǎn),可幫助開發(fā)人員有效地使用 API。清晰完整的 API 文檔對(duì)于理解功能、端點(diǎn)、請(qǐng)求/響應(yīng)格式、身份驗(yàn)證、速率限制和錯(cuò)誤處理至關(guān)重要。文檔中包含實(shí)用的代碼示例可以增強(qiáng)開發(fā)人員對(duì)如何實(shí)現(xiàn) API 的理解。

優(yōu)化第三方應(yīng)用程序的 REST API

第三方應(yīng)用程序 API 的優(yōu)化重點(diǎn)是促進(jìn)輕松集成和更新。 API 版本控制對(duì)于允許服務(wù)提供商在不中斷現(xiàn)有客戶端的情況下引入更改至關(guān)重要。優(yōu)化 API 架構(gòu)的模塊化有助于管理復(fù)雜性并隔離問題,從而促進(jìn)多余服務(wù)的集成。

 概括

從理解 REST 架構(gòu)的核心原則到制作、測(cè)試和優(yōu)化 REST API 的復(fù)雜性,我們已經(jīng)開始了 RESTful API 世界的全面之旅。隨著數(shù)字化轉(zhuǎn)型繼續(xù)塑造我們的世界,本博文中分享的知識(shí)和技能將使您能夠?yàn)檫@一發(fā)展做出貢獻(xiàn)。

原文鏈接:https://www.moesif.com/blog/technical/api-development/Blueprint-to-Create-RESTful-APIs/

上一篇:

通過API集成簡(jiǎn)化工作流程:優(yōu)勢(shì)與最佳實(shí)踐

下一篇:

掌握REST API進(jìn)行測(cè)試:質(zhì)量保證的基本方法和工具
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)