EBU6610 Block4 北邮国院英方课“information system“信息系统期末笔记分享-part4

前言

       我们是变形者集群,正在因为打了五天帝国时代4而时间不够感到难过,这次来复习block4。这部分内容多且杂,还需要一些编程知识,内容的深度和广度冠绝本门课程,可能需要上下两个部分来复习,我们走着看。

上半部分是关于存储和交换信息的三种方式:XML,CSV和JSON。这三个都是信息存储的格式,他们功能相似,各有优劣,他们的对比经常被考察,但由于知识点具体可感且所学不深,不考察生成代码所以较为简单;下半部分是restful api标准和ajax方法,内容多且相对抽象,在本章中上下大概是1:4的关系。考虑到这可能是我们最后一个或者倒数第二个信息系统相关文章,想要分享一下备考的经验。英国佬的考题并不复杂,指的是逻辑上并不复杂,且相同题型的变化很少,更希望我们初步基本地了解知识体系之后就能取得高分。理解知识本身并不复杂,关键是如何把它们记忆下来,我们早已过了十几岁可以死记硬背、过目不忘的年龄,更需要一些场景和理解才能让这些知识在我们脑中串联起来,所以我们在文章中所说的一些“废话”正是由此而生——如果是知识点的总结提炼和罗列,大概率只能通过写作本身的过程加深我们自己的理解,而对于读者收益甚微。所以,我们会多次回想和总结,尝试用一种简单和易懂的逻辑把它们串联起来,让读者觉得“这就是这门课的内容,如此简单?只要肯认真学一阵就一定能掌握了”,有了这初步的成就感,,不论是去刷历年题还是看课件,都是势如破竹了。

但我们的这些内容并不能撑起整个体系,而是一些梯子或者简化mod,在我们阅读课件的时候起到脚手架的作用。所以如果你仍然想要掌握这门课的内容,务必对照着这些文字完整地过一遍ppt。

    XML

Xml简述

在前面几章,我们已经了解过了信息是如何在我们使用它们的时候保证安全的传播的,比如从内容本身的加密,到网络协议层面的保护,再到用户实际使用时面临的用户界面,登录登出等,以及黑客可能进行的攻击方式。接下来我们要学的就是如何存储和交换信息。

比如,一个app中产生的数据需要上传到云端,或者其它app,在这条传递数据信息的供应链中,该怎么让信息的格式得到每一环的认可,又便于每一环进行一些微调和修改呢。所以我们就要商量出一些标准化的高效格式,xml就是其一。

Xml设计出来就是为了在不同系统、应用平台甚至操作系统之前进行数据交换的、跨语言跨平台、具有优秀扩展性的交换工具。它存储的信息大概长成这样:

对于一个完整人名,我们可爱的网安法讲师Michaela教授的全名和本门教授Alan的全名就可以被写成上图的格式,来保证存储和交换数据时对于每个部分的功能和划分绝对没有疑问。以下我们会描述如何创作这么个格式,以及它有哪些标准,毕竟这部分知识点的考察就是给格式挑错、让我们自己写一段之类的,需要我们掌握基本的格式写法。

当XML拆分一个信息时,我们需要把它们分解成element和attributes,而element中还可以有子element,也就是parent和child的关系。根据他们是否还有子element,还可以讨论这些element是has complex content还是has simple content。

然后是attribute, 一些简单的,很少改变的元素的属性就可以写在attribute里。比如以上是一个椭圆图案的信息。

现在我们大概能知道一个xml文件长什么样子,但还有些语法知识需要了解。只有满足了所有xml语法,才算做是一个well-formed xml。Well-formed是本章常考的概念之一,可以理解为程序的不报错,作文的grammatically right。与此相对的是另一个概念:valid。这是表明这个xml“符合要求”,这就更加具体了,比如你写的代码要能完成甲方需求的功能、你写出的报告包含必要的几个部分——这非常主观,大概相当于作文写的有血有肉吧,我们需要知道valid和well-formed不同,但一定至少是well-formed就可以了。课件上说的也比较模糊,有一句定义:满足the business document for xml schema.也就是满足甲方要求,可以进行信息交流。

语法知识

接着是一些语法知识,也就是一个well-formed XML要满足的条件。都十分的符合逻辑尝试,明白一下他们的思路就可以了。

首先是xml最外层的东西,应该以这个开始:

<? Xml version=”1.0”?>

还应该有包揽一切的总元素root element。以上面那个Name为例,两个name元素是它的内容,root element就应该是names。如果有两个chocolate,根元素就应该是chocolates。这是比较简单的写法。

  1. element名称中没有空格 (2)大小写统一 (3)有内容的元素必须有开有闭 (4)没内容的开闭同体独立存在

  1. 连续两个element,要先关闭子element,再关闭parent (2)不能以数字开头 (3) 保留字符不能用

  1. 可以用下划线开头 (2)保留字符不要用 (3)冒号有特殊含义,是为了解决第四点duplication的,也就是同名不同用的element,马上展开说。

所谓的同名就是一些完全不同的信息恰好用了相同的元素名,比如table既可以是桌子,也可以是表格,假设一个xml中包含了他们两个,“表格”中讲的是行列的内容,而桌子的内容是材质、产地、价格等等。这样该如何处理呢?xml的冒号体现了作用,这个解决办法叫做name spaceing。

Namespacing

A namespace qualifies a name so as to eliminate ambiguity, 简单来说,如果有两个table,我们用h:table和f:table就可以了。我们需要知道xml是怎么解决这个问题的,仅此而已。

最后附上一道xml的历年题。

题目简单直接,要求我们写一个xml文件:information on the photographs uploaded to the academic site in part a is stored in an XML file. The following features are represented as elements:

Upload date

Two emotions, e.g. tired, shocked, drained, sleepy, calm, gloomy, rested;

Photograph height, e.g. 120mm, 150mm.

  1. Write and XML file containing the information for 2 photographs

官方答案中的写法:

<? Xml version=”1.0”?>

 <photographs>

       <photo>

              <date>2019-08-12</date>

              <emotion>drained</emotion>

              <emotion>tired</emotion>

              <height metric=”mm”>122</height>

       </photo>

<photo>

              <date>2019-07-11</date>

              <emotion>sleepy</emotion>

              <emotion>calm</emotion>

              <height metric=”mm”>120</height>

       </photo>

 </photographs>

几个得分点:首先要有root element;其次要包含题目所需的信息;第三个易错点是最后有额外的close tag,比如/xml结尾要扣分;日期信息的格式必须是yyyy-mm-dd,10以下要用07,08这种0开头两位来表示;mm的单位应该写在attribute里面,也可以让height中有两个child element分别是120和单位mm。

XML的特点:适合人类阅读,我们不论从哪一行开始看,都能很明确的知道某个数据是什么意思;冗余verbose,也就是说我们为了存那几个词的内容花费了大量空间在格式上;可扩展性extensible,也就是说我们可以自由定义标记、数据类型和层次结构。

CSV文件

       在信息的传播过程中,还存在csv,json两种储存格式,他们和xml功能类似但各有优劣,使用不同的场合,他们之间的对比和异同也是本章内容考察的核心之一,我们首先说csv:comma separated variables的简称,也就是一堆用逗号分隔的变量。

左边的那个XML用了大量的篇幅,但再csv中只需要右边中间的九个词就可以表达。我们只需要告诉系统每一行的这三个属性分别是什么,之后只写他们就可以了。这无疑是更加高效和适合机器的。

CSV的特点:适合超大数据集、不适合人类阅读,且对于数据类型会有疑问(比如1234是一个四位数还是一个刚好都是数字的字符?)。

那么对于如何把XML转化为CSV也是比较简单了,把其中的元素和属性提取出来,写在第一行,后面按照第一行的顺序依次排列这些内容,就可以得到一份CSV。

JSON文件

JSON: JavaScript Object Notation

右侧的就是json。JSON的单位数据是name:value pairs。比如{"age":45, "nationality":"french"},都是由名称和内容用冒号相连组成的。

三种存储方式总结

       这部分知识点考察方法大多固定,让你根据某些信息自己手写一份简短的XML,再转换成CSV,JSON格式,十分简单。但我们仍然需要知道这三种方法的特点优劣以及适用场景。在这部分,课件创造性的使用了无法理解的“两个一组”总结方式,也就是把XML&JSON的共同点放在一起;XML&CSV放在一起,令人实在无法确定这是否就是全貌,效率极低。我们只好自己从课件的缝隙中抠出特点,按照我们熟悉的方式提炼信息。

       XML:人类可读human readable; 结构化structure; 可扩展性 extensible;高数据负载high data payload

       JSON:人类可读human readable; 结构化structure; 轻量级 lightweight;易于解析easy to parse; 纯json不支持超媒体 plain JSON does not support hypermedia (key property of

RESTful Web APIs)

       CSV: 适合大量数据 suitable for large datasets; 不适合人类阅读 not for human reading; 修改不便 need to add in each line;模糊的格式 Vague format(这是在说,如果这堆靠逗号分隔的信息本身含有逗号之类的分隔符会很麻烦)。以上是轻松愉快的存储方式部分,现在已经是一点半了,剩下的硬骨头且看下回分解。

HTTP小复习与引入

       课件中有11页的小专题用来复习去年学过的HTTP。可以简化理解为GET POST PUT和DELET,其中GET是从服务器获取数据,POST是提交数据和表单,PUT用于更新和创建资源,DELET用于从服务器删除。

       另外,在HTTP响应中,如果一整个HTML文件被返回,则会让整个网页重新加载这个HTML,来让用户看到新的网页信息。这样会导致每一处更新都要重新加载一边,后面的ajax会解决这个问题。

RESTful API

     WEB API基本概念

       API成为应用程序接口,可以允许在一个应用程序中直接调用另一个网页或程序中的数据,而把多个API组合在一起形成MASH,就可以自由调用和调配来自许多地方的数据(并不准确,不过不太了解API的话为了这次考试可以这样理解)。

       除此之外,这部分还引出了诸多类似的概念,我们尝试汇总和梳理:

    API(应用程序编程接口):API是一组定义了不同软件组件之间如何互相通信的规则和协议。它们允许不同的应用程序或组件之间共享功能和数据。

 Web API(Web应用程序编程接口):Web API是一种API,通过Web公开访问。它们使用标准的HTTP协议来使应用程序能够与Web服务器进行通信,通常以JSON或XML格式传输数据。

  RESTful Web API:RESTful Web API是一种遵循称为REST的设计原则的特殊Web API(后面会说)。它们使用HTTP方法(如GET、POST、PUT、DELETE)来执行操作,并且通常具有资源导向的URL结构。

  Web application:Web应用程序是一种基于Web的应用程序,用户可以通过浏览器访问它们。这些应用程序通常用于提供交互性和动态性,比如在线购物网站、社交媒体平台等。简而言之,就是网页上和你交互的计算器、游戏等等。

  Web service:Web服务是一种基于网络的软件系统,它们通过标准的网络协议提供某种功能或服务。它是写给程序的,注重信息传递,并没有用户交互和我们熟悉的网页。

RESTful API

       了解了什么是Web API,我们就要设计出最好最安全的一种,这种WEB API的性质被总结为REST原则,收到我们推崇。REST并不是实际存在的标准、框架或者是协议,而是一些design constrains”设计上的限制”,如果一个WEB API满足这些原则,它就是RESTful的。

这些原则是:

1. Addressable resources

– Information abstracted as resources. Each resource is located by a URL

一个URL对应一个信息,方便客户端准确查找

2. Uniform, restricted interface

– Small common set of methods

使用规定的方法交流,一般是HTTP的GET POST,简化通信,易于学习

3. Client and server exchange resource representations

– A resource can be represented using multiple formats, for different

platforms (HTML browser, javascript-JSON, Java/C#-XML).

资源允许用多种方法表示,让用户灵活选择格式,也减少传输成本和延迟

4. Stateless Communications

– Vastly improved scalability

无状态响应让服务器不需要保存客户端的状态

5. Hypermedia As The Engine Of Application State (HATEOAS)

– Application state is defined / driven by hyperlinks in representation

服务器告诉用户他们可以进行那些HTTP请求,可以用一个资源导向相关的资源(比如“点击阅读更多相关文章“)用户可以更方便的了解应用的相关信息

例子时间。如果你对什么是API以及这些玩意存在根本性的疑惑,可以参考我们这个例子。存取钱,知道纸币被放在那个仓库之类的是很复杂的工作,来存钱的人并不需要知道。所以我们在银行中设置了前台,这样用户只要和前台交流就可以了。你把身份证递给柜员小姐,她扫描之后再把存取工作转交给后面的专业人员,就可以节省效率。我们当然是客户端client,这个前台的作用就是API。而她通过你上次的交易订单号数字查到存进去的金额,就是addressable resource;如果你说中文她说法语就很难交流,现在规定大家在银行存取钱都说英语,这就是uniform, restrict interface;你的身份证或复印件都生效,柜台中放着打印机复印机,不论你想要纸质还是电子的收据(如果需要),都可以拿到,而不需要额外去打印店,这就是 client and server exchange resource representations; stateless就是她不认识你,也不需要建立什么客户情感关系,也不会因为今天的其他单子而揣测你的身份;HATEOS就是她查到你的上次交易之后,其中还有访问你其它交易的超链接,就会很方便。

另外“资源resource”和“状态state”也是非常关键的概念。

资源就是存储在电脑上的东西。根据我们刚才引出的原则,它应该有一个唯一URL,也就是这笔钱和保险柜的编号,才能确定具体是什么。可以说thing+url就是一个资源。

状态就是资源当前在做什么,状态通过表示(representation)来呈现给客户端,是资源状态的计算机可读的描述,用户就可以了解和操作这个资源目前的状态,而不需要编码所有细节。

其他概念和总结

接着是另一个概念语义semantics,可以粗略理解为格式标准,比如生物描述的界门纲目、旅游景点都要有票价、开房事件等等。那么为了让应用能快速找到信息,程序之间有没有呢?可以有。

IANA这个组织负责维护互联网媒体类型,这些类型用于标识不同类型的内容,如网页、图像、电子名片等。每种媒体类型都有一个唯一的标识符,以便服务器和客户端可以识别和处理它们。IANA还协调全球互联网资源,包括DNS根、IP寻址和其他互联网协议资源。此外,IANA还控制着“标准”名称、链接关系和媒体类型,以确保它们在互联网上的使用具有一致性。

这章讲的很多很碎,课件的排版又实在不尽人意,如果时间允许的话去找些考研的教程是最好的,如果只是为了应付本次考试的话,可以参考ppt最后几页(蓝色部分之前)提出的问题,可以都回答出来就算过关了。

(小提示:可以丢给gpt,在ppt57页)

AJAX

AJAX的原理

我们之前提到,交表单会导致整个页面重新加载,包括网页上的每个图片和视频。但我们肯能只想刷新或提交某一个框的字符,这该怎么办呢?这时候就要用到AJAX端口。AJAX是Asynchronous JavaScript and XML的简写,也就是异步javascript和XML。所谓异步需要和同步相对:当我们刷新时,网页在完全刷新出来(同步)之前,会阻止我们进行交互,而异步就可以在不刷新的情况下进行交互。具体来说,Ajax应用程序在用户和服务器之间放置了一个中间层:Ajax引擎(JavaScript)作为用户的接口。

在AJAX中,当用户与应用程序交互,例如点击按钮或提交表单时,JavaScript代码可以在后台发起与服务器的请求,而不会导致页面刷新或用户操作的中断。用户可以继续与应用程序交互,而不必等待服务器响应。一旦服务器返回了响应,JavaScript代码可以处理这个响应,通常通过回调函数,然后更新页面的特定部分或执行其他操作。

具体来说,我们需要一个Javascript函数来设置AJAX,当我们把需要更新的文本按照1.访问文本(接着验证文本) 2.创建符合HTTP要求的名值对 3.确保符合HTTP格式 4.使用GET或POST请求发送 这样就可以实现异步。

当我们需要更新页面或者填入新东西的时候,可以使用innerHTML或者DOM,其中innerHTML尤其简单,而DOM则需要为更多的对象编写更多的java script代码。前者简单,但在添加css tag的时候容易出现格式问题,使得页面无效,也需要更加注重安全问题。

AJAX和JSON的安全问题

安全问题的政策SOP:Same-origin policy,也就是说应用程序只能访问来自自己服务器的数据,会拒绝其他服务器的访问,因为这非常不安全。

但是,现在我们的程序或网页真的需要来自其他服务器,比如新浪微博,b站的搜索栏和链接等等,要怎么办呢?

JSONP 就是JSON with padding。它将JSON对象包装为函数的参数也就是<script>,以此来绕过SOP政策,成功访问其他服务器的数据。仅适用于GET请求。这并不AJAX。

但这也存在问题——我们之前提到过的XSS,绕过SOP访问未知的资源是很可能被攻击的。

CORS相当于一种机制,让服务器在和浏览器互动之后决定是否允许访问。使用CORS的话就可以实现跨域访问了。可以和AJAX一起使用,CORS不运行脚本script,比JSONP更加安全。

CORS也存在安全风险:Access-Control-Allow-Origin: * 是系统中的默认设置:在某些情况下,网站可能配置CORS以允许任何网站访问其资源,即使用通配符*来表示。这会导致潜在的安全风险,因为任何网站都可以访问这些资源。恶意用户可能会降低价格、更改描述、删除商品。

      

课件的倒数第二页进行了详尽的总结,梳理了本章的逻辑,十分的到位,一定要看明白。大概内容是这样:我们不止想要自己服务器的内容,还想看来自其他组织的数据。(这是核心需求,承接AJAX)这是因为浏览器的SOP阻止了AJAX访问。由此衍生出了JSONP和CORS两种方法。JSONP通过把数据放在<script>中绕过了SOP,但这并不是AJAX。而CORS用预先批准的思路,在HTTP头中加入申请信息,放宽了SOP政策,允许一个白名单的人访问。这样就可以和AJAX一起工作了。

结语

       信息系统这门课内容多而杂,唯一有效的提分办法就是不断梳理ppt以及了解历年题。我们的这份资料并不能包含全部知识点,而是把可以讲成逻辑梳理的主干部分串了起来,当然,多而杂只是因为我们学的并不够深入,也算是果园课程的一大特征了。

       我们写到这里只感觉到时间的紧张,下一步计划也几乎都会围绕着历年题展开。非常感谢面前的你看到这里,能为提供任何的知识或信心上的帮助已经足以让我们喜出望外了。但这并不是最后一门考试,考试也不是我们的全部。我们愿意写出这份总结也只是一种尝试和放松,并不会再回来勘误或补漏。最后想要感谢我们可爱的英方讲师们,是你们的热情和投入让我们相信应试并不是全部,更加相信学习的过程和领悟的瞬间。

       希望你能发挥的很好,如果对于本篇内容有什么问题,直接来宿舍找我击剑吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值