標籤:

用Nodejs,GraphQL,MongoDB,Hapi和Swagger構建強大的API(一)

用Nodejs,GraphQL,MongoDB,Hapi和Swagger構建強大的API(一)

來自專欄編程實驗室

我們將構建

一個非常強大且靈活的基於Nodejs的GraphQL API

由MongoDB提供支持的Swagger文檔

準備工作

  • 安裝NodeJS
  • JavaScript
  • 終端(最好基於bash)
  • 文本編輯器
  • MongoDB

步驟

  • 打開終端並創建項目, 在項目目錄中初始化一個Node項目。

創建項目

  • 接下來設置Hapi伺服器。安裝dependencies,可以使用Yarn 或 NPM。

yarn add hapi nodemon

Hapi

Hapi使開發人員可以專註於編寫可重用的應用程序邏輯,而不用花費時間構建基礎架構。

https://youtu.be/2lprC0yYeFw?

youtu.be

使用Hapi不是Express是因為Hapi是一個Node框架,與樣板代碼相比更加簡單和靈活。Hapi使我們能夠以非常快速的方式構建API。

  • 安裝的第二個依賴項是good-ole nodemon。每次更改時Nodemon都會自動重新啟動伺服器,可以幫助我們快速開發。
  • 然後用文本編輯器打開項目。這裡選擇了Visual Studio Code。

設置Hapi伺服器非常簡單。 在根目錄下創建一個index.js文件,內容如下:

首先需要hapi dependency

其次,創建一個不斷調用的Hapi伺服器- 作為參數,傳遞一個包含埠和主機選項的對象。

第三,最後,創建一個名為init的非同步表達式。在init方法內部有另一個啟動伺服器的非同步方法。查看server.start() - 在底部調用init()函數。

現在轉到http://localhost:4000,可以看到以下內容:

  • 快速添加腳本以使用nodemon運行伺服器。 打開package.json並編輯腳本部分

  • 下一步

路由(Routing)

Hapi 路由非常直觀。 假設你點擊/- 你期望會發生什麼? 這裡有三個主要組成部分。

什麼是路徑? - path

什麼是HTTP方法? 它是一個GET-POST或其他東西? - method

如果達到這條路線會發生什麼? - handler

  • 在init方法內部,我們通過參數傳遞將一個新的方法附加到伺服器上,稱為route
  • 刷新頁面可以看到根handler的返回值

建立資料庫

接下來要設置你的資料庫。

  • 這裡將用到 mongodb的 mongoose。

與資料庫相關的重要因素還包括 mlab。 我們用本地計算機運行mongo,而是使用像mlab這樣的雲提供商。(當然你們還可以選擇其他的)

  • 然後創建資料庫

  • 最後為資料庫創建一個用戶。

連接mongoose和mlab

  • 打開index.js並添加下面的內容。

更多關於MongoDB技能的學習教程:

https://youtu.be/9OPP_1eAENg?list=PL4cUxeGkcC9jpvoYriLI0bY8DOgWZfi6u?

youtu.be

  • 如果一切按照計划進行,控制台應該會顯示『connected to database』

創建模型

  • 使用mongoDB進行數據建模。

  • 創建一個名為models的目錄,並新建文件Painting.js

Painting.js是我們的繪畫模型。 它將保存與繪畫相關的所有數據。

需要mongoose dependency。

通過調用mongoose模式構造函數並傳入選項來聲明PaintingSchema。 注意它的強類型:例如name欄位可以包含一個字元串,而techniques由一個字元串數組組成。

導出模型並將其命名為Painting

從資料庫中提取所有的繪畫

  • 首先,我們需要將Painting導入到index.js

添加新的路由

  • 最理想的情況是URL終端反映行為。

例如/api/v1/paintings?—?/api/v1/paintings/{id}- 等等。

  • GETPOST路線開始。GET獲取所有的繪畫,POST添加一幅新的繪畫。

注意:將路線修改為一個對象數組,而不是單個對象。

  • /api/v1/paintings路徑創建一個GET。 在處理程序內部調用mongoose模式。 Mongoose有內置方法 -find(),因為我們沒有輸入查找條件,所以它會返回所有記錄。
  • 還要為相同的路徑創建了一個POST,因為要遵循REST約定。然後解構路由處理程序 – 記住在Painting模式中聲明的三個欄位:name?—?url?—?techniques

在這裡,我們只接受來自請求的那些參數,並將請求參數傳遞給mongoose。 完成傳遞參數後,在新記錄上調用save()方法,將其保存到mlab資料庫中。

  • 如果轉到http:// localhost:4000 / api / v1 / paintings,應該只能看到一個空數組。

因為我們還沒有添加任何繪畫。

  • 安裝postman,它適用於所有平台。

  • 安裝後打開postman。

  • 首先更名為POST

單擊URL欄下面的body選項並在示例中填充欄位。

{ "name": "Mona Lisa", "url": "https://en.wikipedia.org/wiki/Mona_Lisa#/media/File:Mona_Lisa,_by_Leonardo_da_Vinci,_from_C2RMF_retouched.jpg", "techniques": ["Portrait"]}

POST paintings

  • 然後打開 localhost:4000/api/v1/p

GraphQL

源代碼:

sharehoodies/graphql-nodejs-hapi-api

作者:Indrek Lasn

原文:medium.freecodecamp.org

翻譯:sugarain

後續更新請關注實驗樓

推薦閱讀:

Expressjs 生成的NodeJS網站,用「npm start」可以啟動訪問,forever 或者 pm2 可以啟動,但是無法訪問?
什麼是 GraphQL?
前端領域流行的js版本控制方法,以及他們之間的區別?
參加第11屆D2前端技術論壇,你有什麼收穫?

TAG:API | MySQL | Nodejs |