
使用NestJS和Prisma构建REST API:身份验证
在由现代技术驱动的世界里,软件应用程序期望能够无缝运行于各种平台和环境之中。这种互操作性的一个关键组成部分是数据库 API,它使应用程序能够与数据库交互,而不管底层平台如何。对于致力于构建稳健、功能丰富且可扩展应用程序的开发人员而言,跨平台数据库API是不可或缺的。
本文深入研究了八个流行的跨平台数据库 API,概述了它们的优缺点,并为每个 API 提供了实用的 JavaScript 代码示例。我们将深入探究每个数据库的功能特点,以确保您能够为您的应用程序选择到最合适的基础支撑。
智能手机、平板电脑和物联网等新兴技术的广泛使用刺激了对跨各种平台和设备平稳运行的应用程序的需求。React Native、Xamarin 和Flutter等跨平台开发框架已经受到关注,允许开发人员编写一次代码并跨多个平台部署。因此,在开发过程中,跨平台数据库API的选择已成为一个关键因素,它直接影响着应用程序的效率和效果。
为跨平台应用程序选择正确的数据库 API至关重要,因为它直接影响性能、可扩展性、数据一致性和安全性等关键方面。每个数据库API的固有特性在判断其是否适用于特定用例时起着重要作用,因此,让开发人员能够据此做出明智的决策变得至关重要。
我们来分析八种流行的跨平台数据库API。每个都有独特的特性和功能,可满足各种用例和要求。
SQLite是一个独立、无服务器、零配置、事务性 SQL 数据库引擎。它之所以成为世界上部署最广泛的数据库之一,主要是因为其在各种应用程序中所展现出的简单性、可靠性以及卓越的性能。
使用sqlite3包的带有 JavaScript 的 SQLite API 示例代码片段:
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database(':memory:');
db.serialize(() => {
db.run("CREATE TABLE lorem (info TEXT)");
const stmt = db.prepare("INSERT INTO lorem VALUES (?)");
for (let i = 0; i < 10; i++) {
stmt.run("Ipsum " + i);
}
stmt.finalize();
db.each("SELECT rowid AS id, info FROM lorem", (err, row) => {
console.log(row.id + ": " + row.info);
});
});
db.close();
MongoDB是一个 NoSQL 数据库,它使用灵活的、类似 JSON 的格式来存储数据。与传统的关系数据库相比,MongoDB旨在处理非结构化数据,并为现代应用程序提供更加灵活且可扩展的解决方案。
NodeJS 中MongoDB API使用的示例代码片段:
const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017';
const dbName = 'mydatabase';
(async function() {
let client = await MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true });
console.log("Connected to MongoDB");
const db = client.db(dbName);
const collection = db.collection('users');
await collection.insertOne({ id: 1, name: 'John Doe' });
const user = await collection.findOne({ id: 1 });
console.log(user);
client.close();
})();
为 MongoDB 创建 RESTful API 的一个流行选择是RESTHeart。RESTHeart是一款开源中间件,它能够将MongoDB转化为RESTful API服务器,并且提供了一种简便的方式,使得MongoDB集合能够被轻松地公开为RESTful Web服务。
Firebase是 Google 推出的一个功能强大的平台,旨在帮助开发人员高效地构建、管理和开发应用程序。它提供了一套全面的工具,包括实时 NoSQL 数据库、跨客户端实时同步数据的 Firebase 实时数据库,以及用于高级查询和可扩展性的 Firestore。Firebase通过支持电子邮件、密码以及社交登录等方式简化了用户身份验证流程,并借助Firebase Analytics提供了强大的分析能力,以追踪用户参与度。
NodeJS 中FireBase REST API使用的示例代码片段:
import firebase from 'firebase/app';
import 'firebase/database';
const firebaseConfig = {
apiKey: "your-api-key",
authDomain: "your-auth-domain",
databaseURL: "https://your-database-name.firebaseio.com",
projectId: "your-project-id",
storageBucket: "your-storage-bucket",
messagingSenderId: "your-messaging-sender-id",
appId: "your-app-id"
};
firebase.initializeApp(firebaseConfig);
const database = firebase.database();
database.ref('users/1').set({
name: 'John Doe'
});
database.ref('users/1').once('value').then((snapshot) => {
const user = snapshot.val();
console.log(user);
});
Couchbase是一款专为交互式Web和移动应用程序设计的NoSQL数据库。它提供高性能、可扩展性和灵活性,支持 JSON 文档、强大的查询语言 (N1QL) 和内置的全文搜索。
Node.js中使用Couchbase REST API的示例代码片段如下:
const couchbase = require('couchbase');
const cluster = new couchbase.Cluster('couchbase://127.0.0.1');
cluster.authenticate('username', 'password');
const bucket = cluster.openBucket('default');
bucket.upsert('user::1', { name: 'John Doe' }, (err, result) => {
if (err) throw err;
bucket.get('user::1', (err, result) => {
if (err) throw err;
console.log(result.value);
});
});
PostgreSQL也称为 Postgres,是一个功能强大的开源关系数据库管理系统,以其稳健性、可扩展性和标准合规性而闻名。由于其支持高级数据类型以及具备性能优化功能,它非常适合于各种类型的应用程序。
NodeJS 中PostgREST使用的示例代码片段:
const { Client } = require('pg');
const client = new Client({
connectionString: 'postgresql://username:password@localhost:5432/mydatabase'
});
client.connect();
client.query('CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50))', (err, res) => {
if (err) throw err;
client.query('INSERT INTO users (name) VALUES ($1) RETURNING *', ['John Doe'], (err, res) => {
if (err) throw err;
console.log(res.rows[0]);
client.end();
});
});
使用 PostgREST 为 PostgreSQL 创建 RESTful API 是一个高效且简化的过程,使您可以轻松地通过 Web 公开数据库操作。它简化了API的创建过程,无需大量后端编码,使得可以通过HTTP请求直接与数据库进行交互。
Apache Cassandra是一种高度可扩展的分布式 NoSQL 数据库,旨在处理跨多个商用服务器的大量数据,而不会出现单点故障。它由 Facebook 开发,以其跨混合云环境提供持续可用性、线性可扩展性和操作简单性的能力而闻名。由于其分布式架构和无主设计,Cassandra成为了追求应用程序高可用性和容错能力的组织的热门选择。
NodeJS 中的示例代码片段用法:
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({
contactPoints: ['127.0.0.1'],
localDataCenter: 'datacenter1',
keyspace: 'mykeyspace'
});
async function run() {
await client.execute("CREATE TABLE IF NOT EXISTS users (id UUID PRIMARY KEY, name TEXT)");
await client.execute("INSERT INTO users (id, name) VALUES (uuid(), 'John Doe')");
const result = await client.execute("SELECT id, name FROM users WHERE name = 'John Doe'");
console.log(result.rows);
}
run().catch(console.error);
Cassandra 的 API 是CQL,即 Cassandra 查询语言。要使用CQL,您可以通过cqlsh这个CQL的命令行shell连接到Cassandra集群。cqlsh允许您使用CQL与Cassandra进行交互。它随每个 Cassandra 软件包一起提供,可以在 Cassandra 可执行文件旁边的 bin 目录中找到。它连接到命令行上指定的单个节点。
Redis是一种开源内存数据结构存储,以其卓越的性能、多功能性和简单性而闻名。 Redis 最初是作为缓存解决方案开发的,现已发展成为成熟的数据库,支持各种数据结构,例如字符串、哈希、列表、集合等。由于其极快的读写速度以及持久存储的特性,它成为了那些需要实时分析、会话管理、缓存服务以及发布/订阅消息传递功能的用例的理想选择。
NodeJS 中Redis REST API使用的示例代码片段:
const redis = require('redis');
const client = redis.createClient();
client.on('error', (err) => {
console.log('Error ' + err);
});
client.set('user:1', JSON.stringify({ id: 1, name: 'John Doe' }), redis.print);
client.get('user:1', (err, reply) => {
if (err) throw err;
console.log(JSON.parse(reply));
});
client.quit();
Amazon DynamoDB是 AWS 提供的完全托管的 NoSQL 数据库服务,提供无缝可扩展性、低延迟和高可用性。DynamoDB能够应对从每月寥寥数请到每秒数百万请的任何规模的工作负载,是那些追求快速、可预测性能以及无缝可扩展性的应用程序的热门之选。凭借自动数据复制、持续备份和内置安全控制等功能,DynamoDB 简化了数据库管理,使开发人员能够专注于构建可扩展且有弹性的应用程序。
NodeJS 中DynamoDB API使用的示例代码片段:
const AWS = require('aws-sdk');
AWS.config.update({ region: 'us-west-2' });
const dynamodb = new AWS.DynamoDB.DocumentClient();
const params = {
TableName: 'Users',
Item: {
id: '1',
name: 'John Doe'
}
};
dynamodb.put(params).promise()
.then(data => console.log("Added item:", JSON.stringify(data, null, 2)))
.catch(err => console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2)));
const getParams = {
TableName: 'Users',
Key: {
id: '1'
}
};
dynamodb.get(getParams).promise()
.then(data => console.log("Get item succeeded:", JSON.stringify(data, null, 2)))
.catch(err => console.error("Unable to get item. Error JSON:", JSON.stringify(err, null, 2)));
选择正确的跨平台数据库和 API 取决于您项目的具体需求。以下是何时使用上述每个数据库的概述:
每种数据库都有其独特的优势和需要考虑的权衡因素,所以请根据您的项目需求仔细斟酌,选择最合适的一种。
原文链接:https://nordicapis.com/comparison-of-8-cross-platform-database-apis/
上一篇: