幕后英雄总是容易被大家所忽略。在这看脸的世界,大家都以为脸就是全部了,你总是相信你所看到的就是事物的全部,可是你往往看到的只是冰山的一角而已。
现在,基于互联网的各种Web应用、桌面应用、手机app之类的程序,很少会只有前端没有后端了。尤其在这从IT(信息技术)转向DT(数据技术)的时代,用户产生的数据是一种宝贵的资源,所以即便有些程序在前端就能完成所有的工作,但是开发者还是会特意在前端程序中添加一些例如用户数据收集追踪的功能,然后发往后端进行保存和处理(小白用户别害怕,要习惯,哈哈哈)。
因此,伴随着前端开发的工作,总是有一个有时要比你想象中大的多的后端开发工作需要做。今天呢,我们就来聊聊后端的开发知识,给那些对后端开发还没什么概念的朋友介绍下后端开发到底会涉及到些什么内容、需要捣鼓些什么玩意儿。
我们需要协作和控制的东西
现在的编程,其实更多的像是搭积木的过程,利用好现有的资源,再加上一些自己的创新,组合出符合你预期功能的东西,就是编程。
那么,对于服务器端来说,我们拥有些什么样的"现有资源"?我觉得可能会是这些:
服务器操作系统本身提供的能力,比如:文件读写管理;进程创建和调度;TCP连接创建等等
别人已写好的可完成特定功能的系统软件,比如:数据库软件
(Oracle、MySQL,MongoDB...)
,HTTP服务软件(Apache Httpd,Nginx...)
,缓存软件(Redis,Memcached...)
,消息中间件(ActiveMQ,RabbitMQ...)
,搜索服务软件(ElasticSearch,Solr...)
,大数据处理和计算(Hadoop,Spark...)
等等别人已写好的可完成特定功能的应用软件,比如:微软Office系列软件,文字转PDF软件,视频/音乐格式转换软件,甚至是论坛系统,购物系统等等
别人写好并开放的可完成特定功能的网络服务,比如:各种在线的天气预报,股票行情,图片鉴黄,在线支付等等
这些资源都提供了某种形式的API,可供我们的代码进行调用。因此,我们只要合理的利用好这些资源,就可以组合出各种丰富的、拥有自身特色的功能。
我们的后端怎么让前端调用?
假设我们已经使用到了上面所说的各种软件API,在后端写出了一大堆眼花缭乱,功能牛X的功能,然而如果你未提供对外的服务接口,那么这种情况就像是做了一个封闭的铁水箱一样,里面的水没有办法取出来,外界的水也没有办法输进去。
所以,我们要给这个铁水箱开上孔、接上管子,某种规格的孔和管子!为什么我们强调需要某种规格呢?这个道理,其实就跟插座和插头一样,如果插头和插座不是按照统一的规格标准来制造,那做好的插头肯定插不进插座里去。俗话说,不以规矩,不成方圆,只有制定好了接入标准,别人才能按照该标准顺利进行接入。
我们通常采用目前最为流行之一的HTTP协议,来开发我们的对外服务接口。下面我们就来了解下关于HTTP的一些必须了解的知识:
URL
什么是URL?
它有个俗气的名字:网址
。我们通常对网址的理解,就是一个网页的地址,在浏览器里啪啪啪输入一个网址,就能进入到一个网站的页面。
其实URL它的学名叫做统一资源定位符
。从这个名字上,我们能看出,它的关键功能和资源的定位有关。服务器上的资源主要有静态资源,比如各种文件,如网页文件、图片、文本文件、二进制文件等等),以及动态资源,如可执行的代码(PHP,Java,Node.js等写成的动态服务)。每一个资源都有一个唯一的URL来对应,它就像一个精确的门牌号地址一般,根据这个门牌号,肯定能找到一个唯一的资源。
比如上面这个URL就是一个典型的静态资源URL,代表的是在百度服务器上一个路径为/img/baidu_jgylogo3.gif
的GIF图片。
而这个URL是百度的搜索服务,它被分配在百度域名的路径/s
下。而问号?
后面的内容,我们称之为查询字符串(Query String)
,是传递给这个百度搜索服务的参数,搜索服务根据这个参数来判断你要搜索的内容是什么。
HTTP方法
上面我们讲到每个资源都有自己的URL,那么对于一个资源,HTTP还提供了几个操作该资源的方法,下面的文字有点技术化了,请慢慢的仔细的阅读,以求能读懂它的意思:
GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中。
POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
以上的8个方法中,GET和POST方法在实际的开发中用的是最频繁的,几乎也是万能方法,学习初期只要学好使用这2个方法,也能一拳打死老师傅了。PUT和DELETE这2个方法是REST接口设计规范流行起来之后,才慢慢开始被使用起来的,增加这2个方法的使用,可以使在对资源的操作语义方面更加清晰。
请求,响应,以及头域
资源在服务器上,我们如果要操作一个资源,简明的流程是这样的:
请求方先向服务器发起一个资源处理的请求(Request),请求中包含了要操作的资源地址,操作方法等必要信息
服务器接收在到该请求以后作相应处理
服务器处理完毕,向请求方发送一个响应(Response),响应中包含了处理的状态,结果数据等信息
另外,请求和响应,都包含有一个头域(Header),它是客户端和服务器端互相传递信息的一种方式:
- 请求头中包含了请求发起方发送给服务器端的一些重要信息,比如其自身的环境信息(比如请求是由什么浏览器发起的,则它会告诉服务器,它是什么浏览器以及版本,它支持什么字符集,支持何种压缩格式,支持的数据类型等等)
Accept:text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie:BAIDUID=0F562A4822E389DF96273D8A5802EA7A:FG=1; BIDUPSID=F53EEB46DE1C2B4FD6507BD2E2CFD261; PSTM=1500717758;
Host:www.baidu.com
Referer:https://www.baidu.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
X-Requested-With:XMLHttpRequest
- 响应头中则包含了服务器要告诉请求方自己的一些信息,比如告诉请求方要使用何种方式解压数据,数据类型,数据长度,是否要求请求方进行数据缓存等等。
HTTP/1.1 200 OK
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Tue, 24 Oct 2017 09:59:50 GMT
Expires: Tue, 24 Oct 2017 09:59:50 GMT
Server: BWS/1.0
Tracecode: 35904851770187094026102417
Vary: Accept-Encoding
Content-Length: 78
头域中一般用来传递一些客户端和服务端自身特点和环境相关的信息。如果是要传递用户自定义的参数信息或者服务器端资源数据,则一般采用其他途径,比如查询字符串(Query String)、或请求/响应体(Body)。
总结
这次我们比较粗浅的提了一些服务器端开发的知识,特别是HTTP相关的内容。虽然不多,但是对初次涉及这块领域的朋友来说是必备基础知识。
所以,哪怕只是记住文中的几个关键词,对后续的学习和理解也是非常有帮助的。
了解事物背后的真相。
欢迎关注一斤代码的系列课程《从编程小白到全栈开发》