如何部署web service?分步指南

本文将讨论webservices,它们的优势、web service的部署选项,以及它们与API的比较。

此外,你还将学习如何在无需编写任何自定义代码的情况下,将一个电子商务web service部署到云端!

关键要点

  • 理解Web Service的作用:Web Service是现代数字基础设施的关键组成部分,具有诸如互操作性、平台无关性、可扩展性和安全性等显著优势。
  • 探索部署选项:部署web services可以通过多种方式实现,包括传统托管、Platform as a Service (PaaS)、Containers as a Service (CaaS)以及Backend as a Service (BaaS)。
  • 如何将web service部署到云端的指南:本文提供了使用无代码BaaS平台部署电子商务web service的完整教程。

What is a Web Service?

web service是一种通过互联网(通常是通过Hypertext Transfer Protocol(HTTP))提供的软件。web service所提供的数据采用标准化格式,例如XML、JSON、SOAP或YAML。

web services用于机器与机器之间的通信,而并非直接提供给终端用户使用。

例如,移动设备会使用一个天气web service来获取天气信息,然后以整洁的方式进行显示。

web services有多种类型,例如Representational State Transfer (REST)、GraphQL以及gRPC。

一个典型的web service生命周期大致如下:

  1. web service在服务器上监听特定的端口。
  2. 客户端向该端口上的web service发送请求。
  3. web service执行请求并返回响应。在处理响应之前,服务器还可以对请求进行身份验证和授权。
  4. 客户端处理响应。

web services以其平台与语言无关性、可重用性、可扩展性、灵活性以及松散耦合而闻名。如今,几乎每家IT公司都在使用它们。

Web Service vs. API

web service和API这两个术语含义相近,但它们不应被混为一谈。

简单来说,web service是一种只能通过互联网访问的API。这意味着所有web services都是API,但并非所有API都是web services。

Web Service versus Application Programming Interface (API)

API除了可以作为web services之外,还可以执行其他操作。例如,操作系统交互、本地应用程序通信以及应用程序集成。

两个并非web service的API示例是Python文件系统API和JavaScript DOM API。

Web Service Advantages

web services是现代数字基础设施的核心之一,拥有众多优势。让我们来谈谈这些优势吧!

Interoperability

web services的主要优势之一是能够在不同系统和应用之间实现互操作性。

通过遵循HTTP和XML等标准化协议,web services可以在不同的软件组件之间实现无缝通信,而不受底层技术栈的限制。

Platform Independence

web services的另一个优点是它们完全不依赖于任何特定平台。它们可以用任何编程语言实现,并可在包括Windows、Linux、和MacOS在内的任何操作系统上运行。

正如前文所述,它们也可以在任意平台上被调用。

Simple & Efficient

web services易于理解和实现。大多数情况下,它们甚至没有自己的状态,而是使用数据库或其他软件组件。

它们在通过网络访问功能方面提供了一种直接的方式。这种简洁性有助于保持交互的一致性,使在不同平台和技术中理解并使用这些服务更加容易。

Scalability

web services具备很高的可扩展性。它们可以通过纵向扩容(即向服务器节点添加额外资源)或横向扩容(即增加新的服务器节点)来应对各种流量需求。

这可以帮助你大幅降低成本,确保不会浪费计算资源。

Reusability

web services的最大优点在于它们具有很高的可复用性。无需在多个应用中整合相同的代码,它们都可以共同使用同一个web service实例。

可复用性能够带来更小且更易维护的代码库、更好的集中化,并让你节省资源。

Security

web services可以利用身份验证、授权、加密以及其他安全措施。大多数web services都采用SSL/TSL加密进行保护。

这些措施能确保机密性(只有发送者和接收者可以读取消息)以及完整性(消息在传输过程中不会被篡改)。

Web Service Deployment Options

web services既可以自托管,也可以部署到云端。部署web services最常见的云端选择有:

  • Platform as a Service (PaaS)
  • Containers as a Service (CaaS)
  • Backend as a Service (BaaS)

在部署项目时,每种云模型都具有其优点和缺点,需要加以考量。最主要的考虑因素包括易用性、预算、性能以及功能。

Web Service Hosting Pyramid

Conventional Hosting

传统托管是一种部署网站和应用程序的传统方式。服务器可以是自托管,也可以由托管公司提供。

在传统托管模式中,你通常按月或按年租用服务器空间。

传统托管的关键特征包括:

  • 服务器空间——可根据应用需求选择不同的服务器空间方案
  • 网站管理工具——用于网站管理的用户友好型工具,如cPanel
  • 电子邮件托管——提供可以绑定自定义域名的电子邮件托管服务
  • FTP访问——可以通过FTP或安全FTP(SFTP)访问服务器文件

传统托管的主要优势之一是成本相对低廉,尤其适合小型网站和企业。

然而,与基于云的解决方案相比,它在可扩展性和灵活性方面较为不足。传统托管在设置上也更具挑战性。

Platform as a Service (PaaS)

Platform as a Service (PaaS)使用户能够在云环境中创建、管理和部署应用程序。

此外,PaaS服务商会提供多种预构建工具,用于应用程序的创建、定制和测试。

与IaaS相比,PaaS更易上手,对系统管理经验的要求也更低。

此外,你还可以使用负载均衡、托管数据库以及自动备份。相比IaaS,PaaS在自由度和可控性方面更低,并且存在更高的供应商锁定风险。

Containers as a Service (CaaS)

Containers as a Service (CaaS)是另一种常见的云计算模式。CaaS使容器化软件的开发、执行、部署和维护变得简单。它通常与Docker和Docker Compose配合使用。

大多数CaaS平台会提供以下功能:

  • Docker Engine
  • Container registry
  • Scaling capabilities

容器化软件的主要好处在于可以部署到任何地方,不会产生供应商锁定,这意味着你可以在不同的云供应商之间自由切换。对于web services而言,这尤其有用。

Backend as a Service (BaaS)

Backend as a Service (BaaS)是一种云计算模式,它为你管理基础设施并自动化后端开发部分。

此外,它还提供实时数据库、文件存储、社交媒体集成、电子邮件和推送通知等功能。

因此,开发者能够专注于前端的开发,无需再为基础设施和后端费心。

前端通常使用BaaS厂商提供的专有API和SDK进行构建。通过使用BaaS,你可以精简代码库并提升其可维护性。

BaaS在提供IaaS和PaaS所有优点的同时,还提供了一个后端抽象层。使用BaaS,团队可以缩短上市时间并节省工程和人力成本。

How to Deploy a Web Service?

本节将为你演示如何将web service一步步部署到Back4app平台。我们将使用Back4app的无代码BaaS解决方案。

如果你对自定义代码的方案感兴趣,可以参考以下文章:

  1. Deploy a Flask Web Service to Back4app Containers
  2. Deploy a Node.js Web Service to Back4app Containers
  3. Deploy a PHP Web Service to Back4app Containers
  4. Deploy a FastAPI Web Service to Back4app Containers

What is Back4app?

Back4app是最受欢迎的Backend as a Service (BaaS)解决方案之一。

使用它,你可以显著加快开发进度,并专注于应用的核心方面——例如业务逻辑和前端,而由Back4app处理其他所有内容。

Back4app既提供无代码部署,也支持自定义代码部署。它使用起来非常简单,几乎没有学习曲线,既适合初学者,也适合有经验的开发者。

Back4app的优势在于,它能够基于你的数据库表自动生成RESTful和GraphQL APIs。

除此之外,它还为几乎所有流行的编程语言或框架提供SDK,包括React、Android、iOS等等!

Back4app Core Features

  • 类似电子表格的数据库
  • 用户管理与认证
  • 自动化API生成
  • Cloud Code函数与调度
  • 实时数据

要跟进本文操作,你需要一个免费的Back4app账户。如果你还没有,可以注册一个

Project Introduction

在本文中,我们将构建一个简单的电子商务web API。

该API将提供产品、产品类别以及购买记录的管理功能,并允许我们对每个数据库表执行创建、读取、更新和删除(CRUD)操作。

除此之外,我们将使用Cloud Code来实现自定义函数,用于计算电子商务相关统计数据,比如总销售额和最受欢迎的产品。

最后,我们会通过Back4app内置的REST和GraphQL控制台来测试该API。

Create App

要使用Back4app,你首先需要创建一个应用。为此,使用你的Back4app账户登录,并在应用仪表盘上点击“Build new app”。

Back4app Create App

Back4app平台允许你部署两种类型的应用:

  1. Backend as a Service (BaaS)
  2. Containers as a Service (CaaS)

这两种云计算模式都支持部署web services。

主要区别在于BaaS提供的是一个功能完备的后端,而CaaS则允许你部署容器化的web services。

换句话说,BaaS基本上是一种无代码解决方案,而CaaS则是自定义代码的解决方案。

我们将在这里使用Backend as a Service (BaaS)。

Back4app Backend as a Service (BaaS)

在创建Back4app应用时,你可以选择NoSQL或SQL数据库。对于我们的场景,这并无太大区别,所以我们会继续使用NoSQL。

给你的应用取一个合适的名称,然后点击“Create”。

Back4app App Configuration

等待Back4app完成所有配置,包括数据库、应用层、扩容以及用户管理等。这通常需要大约两分钟。

完成后,你将被重定向到数据库视图。

Back4app Database View

Design the Database

接下来,让我们开始构建数据库。

在默认情况下,Back4app应用会自带_Role_User这两个数据库表。它们用于用户管理和身份验证。

这些内容不在本教程范围之内,但你可以查看我们的其他文章来进一步了解。

为了创建我们的电子商务web API,我们将建立以下数据库结构:

E-Commerce Database ER Diagram

我们将先创建ProductCategory表。

在侧边栏点击“Add Class”以创建一个新的数据库表。将其命名为“ProductCategory”,启用“Public Read and Write”,然后点击“Create class & add columns”。

Back4app Create Class

为其添加如下列:

+-----------------------------+-------------+---------------+----------+
| Type                        | Name        | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String                      | name        | <leave blank> | yes      |
+-----------------------------+-------------+---------------+----------+
| String                      | description | <leave blank> | no       |
+-----------------------------+-------------+---------------+----------+

接下来,按照相同步骤创建Product表:

+-----------------------------+-------------+---------------+----------+
| Type                        | Name        | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String                      | name        | <leave blank> | yes      |
+-----------------------------+-------------+---------------+----------+
| String                      | description | <leave blank> | no       |
+-----------------------------+-------------+---------------+----------+
| Relation -> ProductCategory | categories  | true          | yes      |
+-----------------------------+-------------+---------------+----------+
| Number                      | price       | 0.0           | yes      |
+-----------------------------+-------------+---------------+----------+
| Boolean                     | inStock     | true          | yes      |
+-----------------------------+-------------+---------------+----------+

最后,创建Purchase表:

+-----------------------------+-------------+---------------+----------+
| Type                        | Name        | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| Pointer -> Product          | product     | <leave blank> | yes      |
+-----------------------------+-------------+---------------+----------+
| Number                      | quantity    | 1             | yes      |
+-----------------------------+-------------+---------------+----------+

干得好,你已经成功创建了数据库结构。

如你所见,Pointer数据类型用于处理1:n(一对多)关系,而Relation数据类型用于处理n:m(多对多)关系。

最后,你需要向数据库中填充一些产品类别、产品和购买记录。这样我们才能在之后测试web service以确保一切运作正常。

要向数据库填充数据,你可以:

  1. 自行创建一些产品类别、产品和购买记录
  2. GitHub导入这些数据库导出文件(“More > Import > Class Data”)

Web Service Usage

要连接到web service,Back4app提供了多种方式:

  1. Auto-generated RESTful API
  2. Auto-generated GraphQL API
  3. Parse SDK

让我们依次来看看每一种方法!

REST API

Representational State Transfer(REST)是一种基于HTTP的协议,利用了OPTIONSGETPOSTDELETE等HTTP方法。

你现在所使用的大多数API都是基于REST的。它支持多种数据格式,其中JSON最为常用。

REST是一种高效、可扩展且与平台无关的协议。它可以与任何编程语言或框架配合使用。

它的主要缺点是可能会发生数据过度获取或获取不足,不支持实时订阅,也缺少API版本管理机制。

要测试REST API,请选择“API > Console > REST”并执行以下查询:

Back4app REST Console

该查询应返回以下结果:

想了解更多,可以查看How to Build a REST API?

GraphQL API

GraphQL是一种服务器端运行时和查询语言,用于构建应用程序接口(API)。

GraphQL允许客户端向API请求特定的数据,而无需后端提供预先定义的数据集。

它的优点包括灵活性、可维护性以及GraphQL扩展。另一方面,其缺点是复杂度较高、学习曲线更陡,以及缺乏标准化。

要测试GraphQL API,请选择“API > Console > GraphQL”并执行以下查询:

Back4app GraphQL Console

想了解更多,可以查看How to Build a GraphQL API?

Parse SDK

如果你的前端是使用Parse SDK原生支持的编程语言或框架构建的,那么Parse SDK是推荐的方式。

这其中包括React Native、Flutter、Android、iOS、JavaScript、IONIC以及Xamarin。

Back4app API Connect

Parse软件开发工具包(SDK)提供了用于数据检索、操作、用户身份验证、实时数据、Cloud Code函数等方面的类和函数。

在JavaScript中,数据检索的示例代码如下:

API Documentation

Back4app的另一个优点是,它会为所有数据库表自动生成文档。

这些文档包含模型描述、实际示例以及如何处理错误等内容。

在侧边栏选择“API > API Reference”即可查看文档。

Back4app Automatic Documentation

Cloud Code

自动生成的APIs固然很棒,但你无法使用它们完成所有操作。例如,如果你想执行复杂查询、聚合数据或运行自定义代码,你必须使用Cloud Code函数。

Cloud Code函数是Back4app提供的Functions as a Service (FaaS)服务。它允许你定义自定义的JavaScript函数,并通过API调用或固定调度触发。

Create Cloud Code Functions

让我们创建两个Cloud Code函数,用于计算电子商务相关统计数据:

  1. totalRevenue() 会通过聚合Purchase记录来计算总收入
  2. topTenPopularProducts() 会根据购买记录返回最受欢迎的产品

首先,在侧边栏中导航到“Cloud Code > Functions & Web Hosting”。

你会注意到界面被分成了左右两部分。左侧是目录结构,右侧用于编写代码。

默认的目录结构包括:

  1. cloud 用于Cloud Code函数和其他代码
  2. public 目录由Back4app自动提供静态资源服务(静态文件、CSS、HTML)

打开main.js文件。

Back4app Cloud Code

然后,在其中添加以下代码:

最后,点击“Deploy”将这些函数部署到云端。

上面的代码是使用Back4app Agent生成的——这是一款专为开发者打造的AutoGPT。该代理与Back4app和Back4app Containers紧密集成,可让你创建应用、修改应用设置、生成自定义代码等。

Test Cloud Code Functions

在最后一节中,我们将测试刚刚实现的Cloud Code函数。

首先,在侧边栏选择“API > Console > JavaScript”,然后粘贴以下代码:

要运行它,点击界面右上角的“Run”。

你将得到如下响应:

// `totalRevenue` output

{
  "result": 9385.389999999994
}

如果要运行另一个函数,只需将totalRevenue替换为topTenPopularProducts即可。

// `topTenPopularProducts` output

{
  "result": [
    {"objectId": "SA5mUfq9Ll", "name": "Science Fiction Novel", "count": 3},
    {"objectId": "fV0DFPFlnz", "name": "Yoga Mat", "count": 3},
    {"objectId": "gA4zn19Udo", "name": "Smartphone", "count": 2},
    {"objectId": "UKeOHJkJ7l", "name": "Winter Jacket", "count": 2},
    {"objectId": "8PodlEps2R", "name": "Espresso Machine", "count": 2},
    {"objectId": "S15WrDgrpk", "name": "Hair Dryer", "count": 2},
    {"objectId": "8O2D1egX51", "name": "4K Television", "count": 1},
    {"objectId": "RriSWMDg48", "name": "Face Cream", "count": 1},
    {"objectId": "Cq3Hqww69Q", "name": "Blender", "count": 1}
  ]
}

Conclusion

总而言之,你已经了解了web services的概念、它们的优势、部署选项,以及它们与API的比较。现在你也应该能够将自己的web service部署到Back4app BaaS上。

欲获取更多文章资源,请查看back4app-web-service仓库。


Leave a reply

Your email address will not be published.