如何部署web service?分步指南
本文将讨论webservices,它们的优势、web service的部署选项,以及它们与API的比较。
此外,你还将学习如何在无需编写任何自定义代码的情况下,将一个电子商务web service部署到云端!
Contents
关键要点
- 理解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生命周期大致如下:
- web service在服务器上监听特定的端口。
- 客户端向该端口上的web service发送请求。
- web service执行请求并返回响应。在处理响应之前,服务器还可以对请求进行身份验证和授权。
- 客户端处理响应。
web services以其平台与语言无关性、可重用性、可扩展性、灵活性以及松散耦合而闻名。如今,几乎每家IT公司都在使用它们。
Web Service vs. API
web service和API这两个术语含义相近,但它们不应被混为一谈。
简单来说,web service是一种只能通过互联网访问的API。这意味着所有web services都是API,但并非所有API都是web services。
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)
在部署项目时,每种云模型都具有其优点和缺点,需要加以考量。最主要的考虑因素包括易用性、预算、性能以及功能。
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解决方案。
如果你对自定义代码的方案感兴趣,可以参考以下文章:
- Deploy a Flask Web Service to Back4app Containers
- Deploy a Node.js Web Service to Back4app Containers
- Deploy a PHP Web Service to Back4app Containers
- 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平台允许你部署两种类型的应用:
- Backend as a Service (BaaS)
- Containers as a Service (CaaS)
这两种云计算模式都支持部署web services。
主要区别在于BaaS提供的是一个功能完备的后端,而CaaS则允许你部署容器化的web services。
换句话说,BaaS基本上是一种无代码解决方案,而CaaS则是自定义代码的解决方案。
我们将在这里使用Backend as a Service (BaaS)。
在创建Back4app应用时,你可以选择NoSQL或SQL数据库。对于我们的场景,这并无太大区别,所以我们会继续使用NoSQL。
给你的应用取一个合适的名称,然后点击“Create”。
等待Back4app完成所有配置,包括数据库、应用层、扩容以及用户管理等。这通常需要大约两分钟。
完成后,你将被重定向到数据库视图。
Design the Database
接下来,让我们开始构建数据库。
在默认情况下,Back4app应用会自带_Role
和_User
这两个数据库表。它们用于用户管理和身份验证。
这些内容不在本教程范围之内,但你可以查看我们的其他文章来进一步了解。
为了创建我们的电子商务web API,我们将建立以下数据库结构:
我们将先创建ProductCategory
表。
在侧边栏点击“Add Class”以创建一个新的数据库表。将其命名为“ProductCategory”,启用“Public Read and Write”,然后点击“Create class & add columns”。
为其添加如下列:
+-----------------------------+-------------+---------------+----------+
| 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以确保一切运作正常。
要向数据库填充数据,你可以:
- 自行创建一些产品类别、产品和购买记录
- 从GitHub导入这些数据库导出文件(“More > Import > Class Data”)
Web Service Usage
要连接到web service,Back4app提供了多种方式:
- Auto-generated RESTful API
- Auto-generated GraphQL API
- Parse SDK
让我们依次来看看每一种方法!
REST API
Representational State Transfer(REST)是一种基于HTTP的协议,利用了OPTIONS
、GET
、POST
、DELETE
等HTTP方法。
你现在所使用的大多数API都是基于REST的。它支持多种数据格式,其中JSON最为常用。
REST是一种高效、可扩展且与平台无关的协议。它可以与任何编程语言或框架配合使用。
它的主要缺点是可能会发生数据过度获取或获取不足,不支持实时订阅,也缺少API版本管理机制。
要测试REST API,请选择“API > Console > REST”并执行以下查询:
该查询应返回以下结果:
想了解更多,可以查看How to Build a REST API?
GraphQL API
GraphQL是一种服务器端运行时和查询语言,用于构建应用程序接口(API)。
GraphQL允许客户端向API请求特定的数据,而无需后端提供预先定义的数据集。
它的优点包括灵活性、可维护性以及GraphQL扩展。另一方面,其缺点是复杂度较高、学习曲线更陡,以及缺乏标准化。
要测试GraphQL API,请选择“API > Console > GraphQL”并执行以下查询:
想了解更多,可以查看How to Build a GraphQL API?
Parse SDK
如果你的前端是使用Parse SDK原生支持的编程语言或框架构建的,那么Parse SDK是推荐的方式。
这其中包括React Native、Flutter、Android、iOS、JavaScript、IONIC以及Xamarin。
Parse软件开发工具包(SDK)提供了用于数据检索、操作、用户身份验证、实时数据、Cloud Code函数等方面的类和函数。
在JavaScript中,数据检索的示例代码如下:
API Documentation
Back4app的另一个优点是,它会为所有数据库表自动生成文档。
这些文档包含模型描述、实际示例以及如何处理错误等内容。
在侧边栏选择“API > API Reference”即可查看文档。
Cloud Code
自动生成的APIs固然很棒,但你无法使用它们完成所有操作。例如,如果你想执行复杂查询、聚合数据或运行自定义代码,你必须使用Cloud Code函数。
Cloud Code函数是Back4app提供的Functions as a Service (FaaS)服务。它允许你定义自定义的JavaScript函数,并通过API调用或固定调度触发。
Create Cloud Code Functions
让我们创建两个Cloud Code函数,用于计算电子商务相关统计数据:
totalRevenue()
会通过聚合Purchase记录来计算总收入topTenPopularProducts()
会根据购买记录返回最受欢迎的产品
首先,在侧边栏中导航到“Cloud Code > Functions & Web Hosting”。
你会注意到界面被分成了左右两部分。左侧是目录结构,右侧用于编写代码。
默认的目录结构包括:
- cloud 用于Cloud Code函数和其他代码
- public 目录由Back4app自动提供静态资源服务(静态文件、CSS、HTML)
打开main.js文件。
然后,在其中添加以下代码:
最后,点击“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仓库。