在正式启动此次开发之旅前,先来了解一下应用开发是怎么一回事儿。
比如现在我们要开发一个照片分享应用,允许用户上传照片,大家可以点赞还有评论照片。可以把这个应用简单的分成两个部分,客户端部分,还有服务端部分。客户端这部分就是客户端应用,这种应用最终要交给用户使用。服务端部分是服务端应用,这种应用要放在服务端上运行,给客户端应用提供各种服务,比如验证用户身份的服务,处理照片文件的服务,存储用户评论的服务等等。
客户端:用户界面
客户端应用主要提供的是用户界面,用户可以通过某个用户界面完成他要做的事情,比如你可能需要提供一个内容列表界面,让用户浏览应用提供的内容,提供一个登录界面来检查用户的身份,用户点了内容列表上的心形小图标可以点赞或者取消点赞内容。
客户端应用要交给用户使用,前端、移动端、桌面端,这些都属于客户端应用。你可以自己选择要开发哪一种客户端应用,比如你想让用户可以通过浏览器使用你的应用,就要开发一个前端应用。用户在浏览器上输入应用的地址,浏览器会去下载对应的前端应用,这样用户就可以使用你的应用了。开发这种东西可以使用一些前端框架,比如 Vue,React 还有 Angular。编写这类应用使用的语言可以是 JavaScript 或者 TypeScript。
如果希望用户可以把应用安装在自己的手机上,你需要单独再去开发移动端应用,而且要为不同的移动平台去开发各自的应用。比如 Android 平台,或者 iOS 平台,它们都提供各种的开发适合在自己平台上运行的应用。我们也可以借助一些框架,开发出跨平台的应用,比如使用 Flutter,可以同时开发出适应在多种平台上运行的应用。
无论你想开发哪一种客户端应用,这些应用都需要服务端应用提供的服务支持。
服务端:提供服务
服务端应用要放在服务器这边儿运行,给客户端应用提供各种服务。比如客户端的内容列表界面上需要列表数据,我们可以在服务端提供一个服务接口,给客户端提供它需要的内容列表数据。在客户端的登录界面,要验证用户的身份,服务端可以提供一个服务接口,对比用户在客户端那里提供的身份数据,然后给出验证的结果,客户端收到服务端给出的结果以后,才能做出后续的处理。用户在客户端那里赞了某个内容,服务端应用的点赞服务接口要记录用户赞过的内容,比如把数据存储到应用的数据仓库里。
服务端应用经常要跟应用的数据仓库服务做一些互动,比如它要把用户的帐户信息,用户发布的内容存储到数据仓库里,这样在客户端需要这些数据的时候,服务端可以调取数据仓库里的数据,处理之后再把它们发给客户端。
有很多技术都可以用来开发服务端应用,比如 Java、Python、Go、Node.js 等等。服务端应用会提供一个 Web 服务器,这样客户端就可以通过网络跟服务端交换数据了。这些服务端技术可以调取服务器资源,比如把用户上传的文件存储在服务器上,可以处理在服务器上存储的文件,可以操作数据服务,存储或者调取应用的数据等等。
本书介绍的就是基于 Node.js 来开发服务端应用。
程序语言:表达想法
不管我们要开发哪一种类型的应用,都需要使用某种程序语言来表达自己的想法。比如打算用 Go 开发应用,你需要了解一下 Go 语言的基本表达方法。如果想基于 Node.js 来开发应用,需要用的是 JavaScript 或者 TypeScript 语言。不同的程序语言都有各自的个性,但它们又有很多共通的概念,比如变量、函数、类等等。所以学习任何一门程序语言,对学习其它的程序语言都是有帮助的。
我们可以选择 JavaScript 或者 TypeScript 作为第一门程序语言。你可以用它写出各种不同类型的应用,上手也非常简单,打开浏览器就可以学习使用这门语言了,在电脑上安装个 Node.js 以后就可以编写服务端应用了。
这里我们说的 TypeScript 可以想成是带外挂的 JavaScript,就是它在 JavaScript 语言的基础上又加了一些东西,比如一个类型检查系统。也就是 TypeScript 与 JavaScript 的基本语法是一样的,但是用 TypeScript 开发应用的时候,我们可能需要单独去编写一些类型,用这些类型来描述应用里面的某一些东西。
本书我们会使用 TypeScript / JavaScript 来表达自己的想法,开发服务端应用。
客户端与服务端交换数据
应用的客户端与服务端之间需要交互数据,客户端可以把用户产生的数据交给服务端去处理,服务端可以给客户端提供需要的数据。它们之间的沟通方式比较常用的就是请求与响应,客户端可以给服务端发送请求(Request),服务端收到请求以后可以做出响应(Response)。知道请求与响应这种交换数据的方式特别的重要。
在开发服务端应用的时候,可以提供一些功能接口,这些接口提供不同的功能。客户端根据自己的需求请求使用这些接口,比如想要保存用户的评论,可以请求使用服务端提供的创建评论用的接口,客户端在发送请求的时候,会把用户通过用户界面编写的评论内容包含在请求里,服务端应用的创建评论接口收到请求以后,可以提取包含在请求里的评论数据,然后把它放到应用的数据仓库里保存起来,服务端可以给客户端作出一个响应,比如通知一下客户端创建评论的结果,客户端可以从响应里面提取自己需要的数据。
客户端在什么时候发出什么样的请求,服务端如何回应客户端的不同请求,这些就是我们开发者要决定的事情。
数据服务
应用里的数据要放在数据仓库里做永久保存,比如用户的帐户数据,用户发布的内容与评论等等。数据仓库由数据仓库管理系统来管理,数据仓库管理系统有很多种类型,都有各自擅长做的事。在服务器上安装某一种数据仓库管理系统,这台服务器就可以对外提供数据服务了。一般是服务端应用负责跟应用的数据服务进行沟通,验证了服务端应用的身份与权限以后,它们之间可以建立连接,这样服务端应用就可以处理数据仓库里的数据了。
不同类型的数据仓库管理系统,都提供了各自的处理数据用的一套方法,使用这套方法我们的服务端应用才能处理数据仓库里的数据。比如关系型数据仓库管理系统(RDBMS),一般可以通过 SQL 这门语言来处理它管理的数据。也就是,如果我们的应用选择使用这种类型的数据仓库管理系统,就需要使用 SQL 语言来表达自己要做的事情,比如 select * from user,意思就是调取名字是 user 的这个数据表格里的所有数据,包含所有表格栏目,比如在结果里面只需要某些特定的栏目,可以像这样来表达:select id,name from user,意思是调取 user 数据表里的所有数据,在结果里面只需要用户这个数据表格里的 id 还有 name 这两个栏目的值。
本书我们会选择使用 MySQL 这种关型类型的数据仓库管理系统,还将学会使用 SQL 这种语言来表达复杂的想法,比如调取某个特定用户发布的所有内容,要包含内容数据,内容相关的照片,内容作者相关的信息,内容被评论还有点赞的次数等等。
部署应用
平时的开发工作,我们大部分都是在自己的电脑上完成,开发的差不多了,要正式运行的时候,需要部署一下应用。比如把开发好的移动端应用提交到应用商店里,把做好的前端应用上传到 Web 服务器。部署服务端应用指的就是把应用搬到服务器上运行,这台服务器一般都能通过互联网被访问到,服务端应用会提供一个 Web 服务,这样客户端应用就可以通过网络使用服务端应用提供的服务了。
可以给应用准备一台云服务器,比如阿里云的 ECS 服务器,在上面安装配置好运行应用需要的环境,再把应用转移到这台服务器上运行。云服务器一般我们都会选择使用 Linux 类型的操作系统,本书里介绍的 Ubuntu 就是一种 Linux 类型的操作系统。
作为服务端应用开发者,要熟悉在 Linux 类型的操作系统里完成一些事情。远程控制使用这种类型的操作系统的云服务器,可以通过命令行工具,远程连接到服务器,然后通过执行文字命令来完成自己要做的事情,比如安装一个软件,启动一个服务等等。
本书的最后一部分我们会熟悉一种 Linux 操作系统(Ubuntu),然后购买一台云服务器,在上面安装配置好应用需要的环境,再把应用部署到这台服务器上运行。