我们要开发的是一个可以为前端、移动端提供后台服务的服务端应用,就是最终开发的这个应用是要在一台或一群服务器上运行的。前端、移动端等等可以统称为 “客户端”,因为应用的“客户(用户)”都是在这些端上使用我们的应用。
也就是客户端应用一般都提供了一套用户界面,用户可以通过应用的界面使用我们的应用。客户端需要服务端提供的服务,比如在客户端上要显示数据,客户端需要到服务端那里请求获取到。要存储用户在客户端上产生的数据,比如用户输入的文字内容、要上传的图片,这些数据都要从客户端发送到服务端那里处理,服务端会把这些数据存储到相应的地方,比如应用的数据库,或者文件存储服务等等。
再比如用户在客户端上要用他选择的方式进行支付,客户端会把这个支付任务告诉给服务端应用。服务端收到了这个任务,会做一些处理,组织好支付需要的一些东西,然后服务端可以把处理好的东西再交给客户端,客户端会做进一步操作,或者服务端可能会直接向支付服务请求支付,再把支付结果交给客户端。
总之,服务端应用就是提供各种服务,能做各种事情的应用,在客户端上解决不了的事情你都可以交给服务端去处理,当然,这个服务端应用你得自己开发才能提供你需要的服务。我们接下来要做的就是去看看如何开发这种服务端应用。
首先我们要理解客户端与服务端之间是怎么交流的,就是客户端怎么管服务端要数据,服务端又如何把数据交到客户端那里。客户端与服务端之间最常用的沟通、交流的方式就是:请求与响应。客户端对服务端发出一个网络请求,运行在服务器上的服务端收到了这个请求,处理之后会做出响应,比如把客户端需要的数据从数据为里调出来,组织好,再交到客户端那里,或者把客户端发过来的数据存储到数据库里。
客户端与服务端使用请求与响应这种方式进行沟通,沟通的过程有挺多讲究的,服务端应用可以规定,客户端让它做什么事情的时候 ,必须要使用它设置的规则与方法。比如服务端准备好一个地址(接口、路由、网址),告诉客户端,如果你需要做什么事情,你就要请求这个地址,请求的时候你要使用特定的网络协议、请求方法、请求里必须要带着特定的数据等等。
请求用的方法
通常客户端与服务端沟通的时候,用的是 HTTP 或 HTTPS(加密) 协议。服务端设定服务规矩的时候可以设定不同的服务要用哪些特定的请求方法,一般我们称为 HTTP 方法,常用的比如 GET、POST、PUT、PATCH、DELETE。
通常 GET 方法的请求主要用来向服务端要数据,也就是获取数据。POST 方法的请求用来发送数据给服务端,比如创建内容的请求就可以使用 POST 这个方法。PUT 或 PATCH 通常用来修改数据。用 DELETE 方法发送的请求一般是要删除掉应用里的某些资源。
具体使用什么样的 HTTP 方法去做什么类型的服务,这些都是服务端应用自己决定的,也就是作为开发者的我们设计决定的,不过一般我们都会遵循惯例或者标准。
请求里的头部信息
客户端通过网络向服务端发送请求的时候,这个请求里面带着一个头部信息,或者叫标头,英文是 Headers,头部信息就是一些数据,这些数据描述了这个请求,比如这个请求是用什么发出的、什么时间发出的、请求里带着的数据格式是什么等等。服务端收到请求以后可以查看请求里面的这个头部信息,根据这些信息可以做出判断然后去做一些事情。
服务端应用可以事先规定好,让客户端发出请求的时候,要在请求里面包含什么样的头部信息。比如客户端要使用服务端提供的服务,服务端提供服务之前要先检查客户端的身份。所以服务端可以规定,想要用我的这个服务,要在请求的头部里面包含用户的身份验证信息。
请求里的主体数据
如果客户端想让服务端处理一下用户在客户端上生成的一些数据,比如用户要发布的内容、要上传的文件,这些东西都可以作为请求的主体数据,在服务端那里,可以从请求里面把主体数据提取出来,然后做进一步处理,比如把文字内容存储到数据库里,把文件放在文件存储服务等等。
请求得到的响应
服务端收到了客户端发送过来的请求,一般都会做出一个回应,或者叫响应,这个响应里面可能会带着客户端需要的数据,如果服务端处理请求的时候出错了问题,给客户端的响应里会包含错误信息,客户端可以利用这些响应回来的数据,比如把一组文章显示给用户,或者显示响应里带的错误信息,提示应用的用户哪里出了问题。
响应里的状态码
服务端做出响应的时候,这个响应里面会包含一个状态码,通常是三位数字,比如 200、201、404、500 等等。具体可要以使用的状态码参考:https://httpstatuses.com/
这些状态码通常表示特定的含义,比如 200 表示成功,201 表示成功创建了资源,404 表示没找到请求需要的资源,500 表示服务端出了问题。服务端应用在做出响应的时候,会设置一下响应的状态码。这样在客户端那里,就可以根据这个状态码来判断具体要给用户显示什么。
请求与响应使用的数据格式
客户端把数据交给服务端,服务端把准备好的准备响应给客户端,这里用到的数据一般使用一种特定的格式叫 JSON,它是 JavaScript Object Notation 的简称,它是数据的一种组织形式,或者叫数据的表示方法。这种表示数据或组织数据用的格式有点像是 JavaScript 语言里的对象(Object)。
这种数据看起来像这样:
{ "title": "黄鹤楼送孟浩然之广陵", "body": "故人西辞黄鹤楼,烟花三月下扬州。" }
一组大括号 {},里面是这个数据里面包含的一些属性还有对应的值,它们周围都要使用双引号包装一下。上面这个 JSON 数据里,有一个 title,对应的值是 黄鹤楼送孟浩然之广陵,还有一个 body,对应的值是 故人西辞黄鹤楼,烟花三月下扬州。
一个 JSON 数据里面可以包含一组数据,像这样:
[ { "title": "黄鹤楼送孟浩然之广陵", "body": "故人西辞黄鹤楼,烟花三月下扬州。" }, { "title": "静夜思", "body": "床前明月光,疑是地上霜。" } ]
先是一组 [],里面包装了一组数组,每个数据项目都用一组 {} 包装。
JSON 这种格式的数据经常用在客户端与服务端,也就是客户端与服务端交流、沟通、交互数据的时候,这个数据的格式通常都是 JSON。客户端可以组织一个 JSON 格式的数据把它交给服务端,服务端也可以组织好一组数据,把它响应给客户端。
JSON 格式的数据可以很容易转换成 JavaScript 语言能懂的 Object,我们也可以很容易把 JavaScript 的 Object 转换成 JSON 格式的数据。