Nodejs、GraphQL、MongoDB、Hapi 和 Swagger 构建 API(三)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 笔记

可重用 API 流行的最大原因是 API 允许使用来自 Web 客户端、移动应用程序、桌面应用程序的数据,实际上是任何客户端。将构建一个基于 Nodejs,由 MongoDB 数据驱动的强大而灵活的 GraphQL API,并支持 Swagger 文档。

本文基于《Nodejs、GraphQL、MongoDB、Hapi 和 Swagger 构建 API(一)》的MongoDB数据库部分。

项目代码仓库:github.com/QuintionTan…


创建 Models


在开始创建数据模型之前,先把上面连接数据库的代码稍微整理一下,将其封装到一个文件中,创建文件名 mongoConns.js,代码如下:

const mongoose = require("mongoose");
class MongoConns {
    constructor() {
        this.getMainDB = this.getMainDB.bind(this);
        const mongoUrl = "mongodb://127.0.0.1:27018/powerful";
        this.mainDB = mongoose.createConnection(mongoUrl, {
            useNewUrlParser: true,
            useCreateIndex: true,
            useUnifiedTopology: true,
        });
        this.mainDB
            .then((db) => {
                console.info("Connected to MongoDB mainDB");
            })
            .catch((err) => {
                console.error("Failed to connect to mainDB", {
                    params: { err: err.message },
                });
            });
    }
    getMainDB() {
        return this.mainDB;
    }
}
let mongoConns = null;
module.exports = () => {
    if (mongoConns) return mongoConns;
    else {
        mongoConns = new MongoConns();
        return mongoConns;
    }
};

对于 MongoDB,遵循模型约定,接下来进行数据建模。这是一个相对简单的概念,将能够掌握。基本上,只是为集合声明对应的模式。可以将 MongoDB 的集合视为 SQL 数据库中的表。

在项目根目录下创建文件夹 models,在文件夹 models 中创建数据模型文件 Painting.js,代码如下:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const mongoConns = require("../mongoConns")();
const PaintingSchema = new Schema({
    name: {
        type: String,
    },
    url: {
        type: String,
    },
    techniques: {
        type: [String],
    },
});
module.exports = mongoConns.getMainDB().model("Painting", PaintingSchema);
  • 需要 mongoose 依赖
  • 引入数据库连接并初始化 mongoConns
  • 通过调用 mongoose 架构构造函数并传入选项来声明 PaintingSchema。注意它是如何强类型化的:例如,定义了 name 字段可以由一个字符串组成,而 techniques 由一个字符串数组组成。
  • 导出模型并将其命名为 Painting

增加新的路由

理想情况下,希望 URL 端点反映相应的操作。例如 /api/v1/paintings 或者 /api/v1/paintings/{id} 等等。

GETPOST 路由开始。 GET 获取所有 Painting ,POST 添加新的 Painting

回到根目录文件 server.js,添加两个新的路由代码:

const API_ENDPOINT = "/api/v1";
const init = async () => {
    server.route(
        {
            method: "GET",
            path: "/",
            handler: (request, response) => `<h1>This is powerful api.</h1>`,
        },
        {
            method: "GET",
            path: `${API_ENDPOINT}/paintings`,
            handler: (req, reply) => {
                return Painting.find();
            },
        },
        {
            method: "POST",
            path: `${API_ENDPOINT}/paintings`,
            handler: (req, reply) => {
                const { name, url, techniques } = req.payload;
                const painting = new Painting({
                    name,
                    url,
                    techniques,
                });
                return painting.save();
            },
        }
    );
    await server.start();
    console.log(`Server running at:${server.info.uri}`);
};

请注意,将路由修改为对象数组而不是单个对象,还使用了箭头函数。

  • /api/v1/paintings 路径创建了一个 GET 路由。在处理程序中,mongoose schema 方法 find(),它将返回所有记录,因为这里没有没有传递任何条件来查找。
  • 还为 /api/v1/paintings 路径创建了一个 POST 路由。这样的API设计将遵循 REST 约定。

在浏览器中输入 http://localhost:3006/api/v1/paintings,将在页面上看到一个空数组。

1.png

接下来调试 POST 的接口,需要按照工具 Postmain,下载安装好。

打开  Postmain ,创建一个POST 请求。2.png

配置好参数,点击发送,看到响应如下:3.png

至此一个新的记录已经创建了,可以去数据库中查看。或者返回浏览器刷新 http://localhost:3006/api/v1/paintings,可以看到如下数据:4.png

至此一个读取、写入接口完成了。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
1天前
|
缓存 负载均衡 安全
后端开发的艺术:构建高效、可扩展的API
在现代软件开发中,后端开发扮演着至关重要的角色。它不仅负责处理数据存储、业务逻辑和安全性,还需要提供高效、可扩展的API供前端和其他服务使用。本文将深入探讨后端开发的关键概念和技术,帮助读者了解如何构建高效、可扩展的API,并提供一些实用的建议和最佳实践。
|
1天前
|
前端开发 JavaScript API
探索GraphQL:如何构建高效的数据API
【10月更文挑战第25天】在现代Web开发中,API的效率和灵活性至关重要。本文探讨了如何利用GraphQL构建高效的数据API。GraphQL通过声明式查询方式,允许客户端精确指定所需数据,减少数据传输量,提高API效率。文章介绍了设置GraphQL服务器、设计API Schema、实现解析函数及调整前后端交互的具体步骤,展示了GraphQL的优势和应用场景。
12 2
|
1天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
9 2
|
1天前
|
关系型数据库 测试技术 API
探索后端开发:构建高效API的艺术
【10月更文挑战第25天】在数字化时代,后端开发不仅仅是编写代码那么简单。它是连接用户与数据的桥梁,是实现业务逻辑的基石。本文将深入探讨如何构建高效的API,从理解RESTful原则到选择合适的框架,再到处理数据库交互,每一步骤都是精心策划的舞蹈。我们将通过实际案例,揭示如何在保证性能和安全性的同时,提供流畅的用户体验。让我们一起走进后端开发的世界,发现那些隐藏在代码背后的智慧和创造力。
|
Java API
Java:一个API文档框架Swagger
Java:一个API文档框架Swagger
116 0
Java:一个API文档框架Swagger
|
1天前
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应
|
11天前
|
编解码 监控 API
直播源怎么调用api接口
调用直播源的API接口涉及开通服务、添加域名、获取API密钥、调用API接口、生成推流和拉流地址、配置直播源、开始直播、监控管理及停止直播等步骤。不同云服务平台的具体操作略有差异,但整体流程简单易懂。
|
23天前
|
人工智能 自然语言处理 PyTorch
Text2Video Huggingface Pipeline 文生视频接口和文生视频论文API
文生视频是AI领域热点,很多文生视频的大模型都是基于 Huggingface的 diffusers的text to video的pipeline来开发。国内外也有非常多的优秀产品如Runway AI、Pika AI 、可灵King AI、通义千问、智谱的文生视频模型等等。为了方便调用,这篇博客也尝试了使用 PyPI的text2video的python库的Wrapper类进行调用,下面会给大家介绍一下Huggingface Text to Video Pipeline的调用方式以及使用通用的text2video的python库调用方式。
|
1天前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。
|
23天前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!