从编程小白到全栈开发:服务端的一些概念

简介: 幕后英雄总是容易被大家所忽略。在这看脸的世界,大家都以为脸就是全部了,你总是相信你所看到的就是事物的全部,可是你往往看到的只是冰山的一角而已。现在,基于互联网的各种Web应用、桌面应用、手机app之类的程序,很少会只有前端没有后端了。

幕后英雄总是容易被大家所忽略。在这看脸的世界,大家都以为脸就是全部了,你总是相信你所看到的就是事物的全部,可是你往往看到的只是冰山的一角而已。

现在,基于互联网的各种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来对应,它就像一个精确的门牌号地址一般,根据这个门牌号,肯定能找到一个唯一的资源。

https://www.baidu.com/img/baidu_jgylogo3.gif

比如上面这个URL就是一个典型的静态资源URL,代表的是在百度服务器上一个路径为/img/baidu_jgylogo3.gif的GIF图片。

https://www.baidu.com/s?wd=Apple

而这个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个方法的使用,可以使在对资源的操作语义方面更加清晰。

请求,响应,以及头域

资源在服务器上,我们如果要操作一个资源,简明的流程是这样的:

  1. 请求方先向服务器发起一个资源处理的请求(Request),请求中包含了要操作的资源地址,操作方法等必要信息

  2. 服务器接收在到该请求以后作相应处理

  3. 服务器处理完毕,向请求方发送一个响应(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相关的内容。虽然不多,但是对初次涉及这块领域的朋友来说是必备基础知识。

所以,哪怕只是记住文中的几个关键词,对后续的学习和理解也是非常有帮助的。

了解事物背后的真相。
欢迎关注一斤代码的系列课程《从编程小白到全栈开发》

目录
相关文章
|
7月前
|
前端开发 JavaScript Java
从前端到后端:构建全栈应用的技术路线探析
【2月更文挑战第3天】本文通过探讨前端和后端开发的基本概念和技术要点,深入剖析了构建全栈应用的技术路线。从前端的HTML、CSS和JavaScript,到后端的Java、C和数据库,我们将带您逐步了解如何将不同技术组合起来实现高效、稳定的全栈应用。
179 7
|
7月前
|
前端开发 NoSQL 关系型数据库
从前端到后端:探索全栈开发的无限可能
本文将介绍全栈开发的概念以及其在现代技术领域中的重要性。我们将深入探讨前端和后端开发的关联,并探索多种编程语言(如Java、Python、C、PHP、Go)以及数据库技术在全栈开发中的应用。通过本文,读者将了解到如何成为一名全栈开发人员,以及如何利用全栈开发的技能构建出强大且可扩展的应用程序。
|
2月前
|
存储 Java 数据库
探索后端技术:从基础到高级应用的旅程
在信息技术领域,后端开发是构建应用程序的核心。它涉及服务器、数据库和应用程序之间的交互,是实现数据存储、管理和检索的关键。本文旨在提供一个全面的后端技术概述,从基本的编程语言和框架开始,逐步深入到性能优化和安全性增强等高级主题。无论是初学者还是经验丰富的开发者,都能在这篇文章中找到有价值的见解和建议,以帮助他们在后端开发的旅程中不断前进。
|
3月前
|
关系型数据库 Java 数据库
探索后端技术:从基础到高级的旅程
本文将引导读者深入探索后端技术,从基础知识入手,逐步过渡到高级概念和技术。文章旨在为初学者和有经验的开发者提供有价值的见解和指导,帮助他们在后端开发领域不断进步。通过通俗易懂的语言和条理清晰的结构,我们将一起探讨后端技术的本质、内涵以及实际应用。
67 4
|
7月前
|
前端开发 JavaScript NoSQL
从前端到后端:构建全栈开发者的必备技能
随着互联网技术的不断发展,全栈开发者的需求日益增长。本文将介绍如何从前端到后端,掌握全栈开发所需的关键技能,包括前端框架的选择、后端语言的学习以及数据库的应用,帮助读者构建成为全面的技术专家。
|
7月前
|
安全 网络安全 网络架构
网络开发过程详细知识点
网络开发过程详细知识点
61 0
|
7月前
|
存储 前端开发 JavaScript
从前端到后端:构建全栈应用的关键技术探究
在当今互联网时代,全栈开发已经成为了越来越多开发者的追求目标。本文将深入探讨从前端到后端构建全栈应用所需的关键技术,涵盖了前端框架选择、后端语言与框架、数据库设计以及前后端通信等方面,帮助读者全面了解全栈开发的必备技能和工具。
|
前端开发 JavaScript Go
深入探讨前后端之争:揭秘Go语言在未来全栈Web开发中的关键角色与价值
深入探讨前后端之争:揭秘Go语言在未来全栈Web开发中的关键角色与价值
148 0
|
负载均衡 网络协议 Dubbo
卷起来了!手把手带你写一个中高级程序员必会的分布式RPC框架
什么是RPC? 远程服务调用 官方:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想 通俗一点:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。 市面上常见的rpc框架:dobbo,springCloud,gRPC...