博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
REST笔记:一种标准的超媒体格式:Atom
阅读量:5807 次
发布时间:2019-06-18

本文共 4505 字,大约阅读时间需要 15 分钟。

中讲述了REST架构风格中最核心本的要素之一:超媒体格式。虽然超媒体格式有很有用,如能被浏览器很好解析的HTML。但是HTML也不是万能的。如我们在AJAX应用中,使用JSON表述格式很显然比HTML要好。再者,我们为了实现某一特定领域而采用自定义的超媒体格式,如果消费者只需要处理表述中的一小部分,虽然我们可以通过获取资源的表述,然后过滤出我们需要处理的资源,但这显然不是一种好的方式。Atom社区所制定了一条深受欢迎的惯例。

目录:

  1、Atom简介
  2、Atom1.0与RSS2.0
  3、Atom中基本概念介绍
  4、Atom中的链接关系
  5、.Net FCL中对Atom的实现
  6、Atom的用途

  1、Atom简介

Atom:Atom联合格式(Atom Syndication Format)的简称。它是 一种基于XML的超媒体格式。它提供了灵活可扩展的互操作的格式,并且因为基于XML的特点,所以它为跨平台的应用间传递数据提供了很好的支持。是IETF的“建议标准”。Atom作为一种流行的超媒体格式已经被Google等广泛使用。下图为一Atom格式实例:

  

  2、Atom1.0与RSS2.0

说起Atom可能有点陌生,但是对RSS都应该比较熟悉。Atom的出现弥补了RSS中的一些不足。中叙述如下:
  1、RSS 2.0 可能包含文本或经过编码的HTML内容,同时却没有提供明确的区分办法;相比之下,Atom 则提供了明确的标签(也就是typed)。
  2、RSS 2.0 的 description 标签可以包含全文或摘要(尽管该标签的英文含义为描述或摘要)。Atom 则分别提供了 summary 和 content标签,用以区分摘要和内容,同时 Atom 允许在summary中添加非文本内容。
  3、RSS 2.0 存在多种非标准形式的应用,而 Atom 具有统一的标准,这便于内容的聚合和发现。
  4、Atom 有符合XML标准的命名空间,RSS 2.0 却没有。
  5、Atom 通过XML内置的xml:base标签来指示相对地址(URI),RSS 2.0 则无相应的机制区分相对地址和绝对地址。
  6、Atom 通过XML内置的xml:lang,而 RSS 采用自己的language标签。
  7、Atom 强制为每个条目设定唯一的ID,这将便于内容的跟踪和更新。
  8、Atom 1.0 允许条目单独成为文档,RSS 2.0 则只支持完整的种子文档,这可能产生不必要的复杂性和带宽消耗。
  9、Atom 按照RFC 3339标准(ISO 8601标准的一个子集)表示时间 ,而RSS 2.0 中没有指定统一的时间格式。
  10、Atom 1.0 具有在 IANA 注册了的 MIME 类型,而 RSS 2.0 所使用的 application/rss+xml 并未注册。
  11、Atom 1.0 标准包括一个 XML schema,RSS 2.0 却没有。
  12、Atom 是IETF组织标准化程序下的一个开放的发展中标准,RSS 2.0 则不属于任何标准化组织,而且它不是开放版权的。

  3、Atom中基本概念介绍

  3.1 提要(feed)
  Atom通过列表来表示数据称之为提要(feed).它的部分元数据说明:
  id:在提要生命周期中永久的、唯一的标识符
  title:提要为我们提供的可读标题
  subTitle:为提要的源信息
  category:提要分类。由其term属性的Value指定。此外有两个可选属性:Label、Scheme,前者表示我们可以理解的表述,后者标识了此分类所属方案
  updated:提要最新更新时间
  link:获取提要的URI
  有关提要的详细信息,可以查阅MSDN

  3.2 条目(entry)

  条目(entry)是构成提要(feed)的带有时间戳数据实体。一个提要中包含一个或多个条目。虽然条目(entry)一般都是包含在提要(feed)中,但是他们都可以单独作为可寻址的资源来被消费者使用。如下即为一个Atom提要:不管是提要(feed)还是条目(entry),都有一个通用唯一标识符:uuid(Universally Unique Indentifier)。
  条目(entry)中与提要(feed)相同的部分就不多做介绍了,由于它们是一种标准的格式,所以代表的意义也大同小异。但条目(entry)有提要(feed)所没有的content元素,用它来设置条目内容。

 

  4、Atom中的链接关系

  link是Atom中主要的超媒体控件,通过它就可以获取资源的表述,供消费者使用。link有几个重要的属性:
  1、rel:描述链接关系以及链接语义的上下文
  2、href:获取资源表述的URI
  3、type:资源可能的媒体类型
  虽然link中有type属性,服务端返回给客户端的响应的HTTP 头信息中也有Content-Type信息。无论怎样Content-Type信息始终是服务端返回给客户端最权威的表述格式。但link中有type属性依然有意义。例如:如果服务端返回给客户端的表述中既有XML,也有JSON格式,那客户端可以根据自身需要,选择适当的URI来获取资源的表述类型。

link控件的几种链接关系:
  self:当前提要或条目所需的资源由href所标识的URI获取
  via:标识当前提要或条目的信息来源
  alternate:连接当前提要或条目的替代表述的链接
  enclosure:表述URI获取表述的资源的尺寸可能会比较大
  related:表示href所指资源同当前提要或题目存在某种关系
  per-archive:当前提要以前最近的一个提要。
  next-archive:与per-archive相反。
实际应用中,如果某个客户端掉线,等网络恢复后,它获取到最新的提要,并且能通过提要中的超媒体控件link 的per-archive链接关系一直往前遍历,从而寻找到它最近一次处理过的提要信息;同时也能通过next-archive来往后遍历,遍历到最新的提要信息。这些链接关系值都是在IANA的链接关系注册表中注册的,已经成为一种标准的处理方式。

 

  5、.Net FCL中对Atom的实现

  在.Net FCL(FrameWork Class Library)中,我们可以使用在System.ServiceModel程序集的System.ServiceModel.Syndication命名空间中找到项目Atom相关的类,来创建我们的应用。主要的类有SyndicationFeed,SyndicationItem,SyndicationContent、Atom10FeedFormatter等。我们通过SyndicationFeed来创建提要(feed),通过SyndicationItem来创建条目(entry)。范例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SyndicationFeed feed =
new
SyndicationFeed
{
  Title =
new
TextSyndicationContent(
"feed Tile"
),
  LastUpdatedTime =
new
DateTimeOffset(DateTime.Now),
  Description =
new
TextSyndicationContent(
"feed Description Content"
)
};
feed.Authors.Add(
new
SyndicationPerson(
"aa@gmial.com"
,
"zhanshan"
,
"cnblogs.com"
));
feed.Language =
"us-en"
;
feed.Generator =
"test feed"
;
feed.Links.Add(
new
SyndicationLink(
new
Uri(
"http://www.cnblogs.com/tyb1222"
),
"via"
,
"linkTitle"
,
"application/Atom+xml"
,1000));
feed.Categories.Add(
new
SyndicationCategory(
"blog"
));
feed.Contributors.Add(
new
SyndicationPerson(
"aa@gmial.com"
,
"zhanshan"
,
"cnblogs.com"
));
SyndicationItem item1 =
new
SyndicationItem(
"Title1"
,
    
"Microsoft may have patents, patent applications, trademarks, ...more"
,
    
new
Uri(
"http://www.microsoft.com"
))
    {Summary =
new
TextSyndicationContent(
"sumary"
)};
SyndicationItem item2 =
new
SyndicationItem(
"Title2"
,
    
"The names of actual companies and products mentioned herein may be ...more"
,
    
new
Uri(
"http://www.microsoft.com"
))
    {Summary =
new
TextSyndicationContent(
"sumary"
)};
List<SyndicationItem> syndicationItems =
new
List<SyndicationItem> {item1, item2};
feed.Items = syndicationItems;

  

  6、Atom的用途

  资源的创建与消费使用Atom是一种比较理想的方式。在Atom中,我们可以将不能以超媒体格式的资源链接到资源的条目中,使用<Content>的src属性链接到这些资源。在REST架构中,我们可以适应Atom来获取资源的表述,并通过它的link超媒体控件来驱动业务的执行进而转移应用的状态。Atom作为IETF推荐的一种标准的超媒体格式,已经广泛应用在成千上万个Web项目中,如Gmail。

 

参考: 

 

转载于:https://www.cnblogs.com/gscq073240/articles/8370990.html

你可能感兴趣的文章
我的友情链接
查看>>
sshd_config设置参数笔记
查看>>
LeetCode--112--路径总和
查看>>
感悟贴2016-05-13
查看>>
百度编辑器ueditor 光标位置的坐标
查看>>
DEV-C++ 调试方法简明图文教程(转)
查看>>
参加婚礼
查看>>
Java重写equals方法和hashCode方法
查看>>
Spark API编程动手实战-07-join操作深入实战
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
MySQL 备份与恢复
查看>>
TEST
查看>>
PAT A1037
查看>>
ReactiveSwift源码解析(三) Signal代码的基本实现
查看>>
(六)Oracle学习笔记—— 约束
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
Scrum之 Sprint计划会议
查看>>