注:以下内容部分来自于mathworks
webread
从 RESTful Web 服务读取内容
1.RESTful
REST 表示表述性状态转移 (representational state transfer),Web 服务的一种常用体系结构样式。RESTful 接口提供标准的 HTTP 方法,例如 GET、PUT、POST 或 DELETE。
随着 REST 成为大多数 Web 和 Mobile 应用的默认选择,势必要对它的基本原理有所了解。
在它提出十多年后的今天,REST 已经成为最重要的 Web 应用技术之一。随着所有技术朝着 API 方向发展,它的重要性有可能持续快速地增长。每门主要编程语言现在已经包含构建 RESTful Web 服务的框架。同样地,Web 开发者和架构师对 REST 和 RESTful 服务有一个清晰的理解是很重要的。这篇教程解释了 REST 架构,然后研究使用它构建通用地基于API的任务的细节。
1.1 什么是 REST
REST 代表表述性状态转移(representational state transfer),它是一种网络化超媒体应用的架构风格。它主要是用于构建轻量级的、可维护的、可伸缩的 Web 服务。基于 REST 的服务被称为 RESTful 服务。REST 不依赖于任何协议,但是几乎每个 RESTful 服务使用 HTTP 作为底层协议。
RESTful 使用HTTP post(创建、更新)数据、读取数据、删除数据。使用HTTP实现CRUD(创建、读取、更新、删除)操作。
1.2 RESTful 服务特点:
每个系统都使用资源。这些资源可以是图片,视频文件,网页,商业信息,或者在基于计算机的系统中可以被代表的任何事物。服务的目的是提供一个窗口给客户端以便客户端能访问这些资源。服务架构师和开发人员想要这些服务变得易于实现、维护、扩展、伸缩。RESTful 架构允许这些,甚至更多。一般来说,RESTful 服务应该有下面的属性和特征,也就是我要详细描述的内容:
- 模型表示(Representations)
- 消息(Messages)
- URIs
- 一致接口(Uniform interface)
- (无状态)Stateless
- 资源之间的链接(Links between resources)
- 缓存(Caching)
2.语法
data = webread(url)
data = webread(url,QueryName1,QueryValue1,...,QueryNameN,QueryValueN)
data = webread(___,options)
[data,colormap,alpha] = webread(___)
[data,Fs] = webread(___)
3.说明
从 data
= webread(url
)url
指定的 Web 服务读取内容并在 data
中返回内容。
Web 服务提供了一个RESTful,后者可以返回具有 Internet 媒体类型格式(例如 JSON、XML、图像或文本)的数据。
按照一个或多个名称-值对组参数指定的方式将查询参数追加到 data
= webread(url
,QueryName1,QueryValue1,...,QueryNameN,QueryValueN
)url
。要将查询放入消息主体,请使用 webwrite
。Web 服务定义查询参数。
添加由 data
= webread(___,options
)weboptions
对象 options
指定的其他 HTTP 请求选项。您可以将此语法与前面语法中的任何输入参数结合使用。
要将数据返回为特定输出类型,请指定 options
的 ContentType
属性。
要使用函数读取内容,请将 options
的 ContentReader
属性指定为该函数的句柄。webread
从 Web 服务下载数据并使用指定的函数读取这些数据:
- 如果指定了一个返回多个输出参数的函数句柄,则
webread
将返回所有输出参数。 - 如果指定了一个不返回任何输出参数的函数句柄(例如视频文件的 Image Processing Toolbox? 函数
@implay
),则webread
将不返回任何输出参数。
[
从 data
,colormap
,alpha
] = webread(___)url
指定的 Web 服务中读取图像,并在 data
中返回该图像。您可以使用上述语法仅返回图像。使用此语法可返回与该图像关联的颜色图和 alpha 通道。
如果 HTTP 响应具有用于指定图像媒体类型的 Content-Type
头字段且 imread
支持该图像格式,则 webread
将返回一个图像。有关受支持的图像格式,请参阅支持的导入和导出文件格式。
[
从 data
,Fs
] = webread(___)url
指定的 Web 服务中读取音频数据,并在 data
中返回这些数据。您可以使用上述语法仅返回音频数据。使用此语法可返回音频数据的采样率(以赫兹为单位)。
如果 HTTP 响应具有用于指定音频媒体类型的 Content-Type
头字段且 audioread
支持该音频格式,则 webread
将返回音频数据。有关受支持的音频格式,请参阅支持的导入和导出文件格式。
4.示例
4.1从网站读取图像
从 Hubble Heritage 网站读取木星图像并显示该图像。
url = ‘http://heritage.stsci.edu/2007/14/images/p0714aa.jpg‘; rgb = webread(url); whos rgb
Name Size Bytes Class Attributes rgb 1000x800x3 2400000 uint8
调整并显示图像。
rgb = imresize(rgb,0.6); imshow(rgb)
木星图像来源:NASA、ESA 和 Hubble Heritage Team (STScI/AURA)。(有关使用条款,请参阅 Hubble Heritage Information Center。)
4.2从 Web 服务 API 读取数据
从世界银行气候数据 API 读取美国的温度数据。绘制 1901–2012 年的温度图。
从世界银行读取数据。此 API 返回 JSON 对象形式的数据。
api = ‘http://climatedataapi.worldbank.org/climateweb/rest/v1/‘; url = [api ‘country/cru/tas/year/USA‘]; S = webread(url)
S = 112x1 struct array with fields: year data
webread
将 JSON 对象转换为结构体数组。每个结构体都包含年份和美国该年的平均温度(以摄氏度为单位)。
显示第一年的温度。
S(1)
ans = year: 1901 data: 6.6187
绘制平均温度图。将 S.year
和 S.data
串联成数组并绘制这些数组。
year = [S.year]; data = [S.data]; plot(year,data) xlabel(‘Year‘); ylabel(‘Temperature (Celsius)‘); title(‘USA Average Temperatures‘) axis tight
世界银行提供的 API 和数据:气候数据 API。(请参阅世界银行:气候数据 API 以了解有关 API 的更多信息;请参阅世界银行:使用条款。)
4.3指定 Web 服务查询参数
在 File Exchange 中搜索在过去七天中上传的包含单词 Simulink? 的文件。
指定查询参数。webread
将 Web 服务查询参数名称和值追加到 URL。File Exchange Web 服务定义 term
和 duration
查询参数,而非 webread
函数。
url = ‘http://www.mathworks.com/matlabcentral/fileexchange/‘; data = webread(url,‘term‘,‘simulink‘,‘duration‘,7);
webread
以字符数组形式返回搜索结果页的 HTML。
4.4指定请求选项
指定一个附加请求选项以通过世界银行气候数据 API 将数据读取到字符数组。
创建一个 weboptions
对象并将其 ContentType
设置为 ‘text‘
。webread
函数将 JSON 对象转换为字符数组而不是结构体数组。显示字符数组的开头。
api = ‘http://climatedataapi.worldbank.org/climateweb/rest/v1/‘; url = [api ‘country/cru/tas/year/USA‘]; options = weboptions(‘ContentType‘,‘text‘); data = webread(url,options); data(1:62)
ans = [{"year":1901,"data":6.6187487},{"year":1902,"data":6.4643273}
世界银行提供的 API 和数据:气候数据 API。(请参阅世界银行:气候数据 API 以了解有关 API 的更多信息;请参阅世界银行:使用条款。)
4.5使用 POST 请求读取数据
发送 HTTP POST 请求以在 File Exchange 中搜索在过去七天中上传的包含单词 Simulink 的文件。
url = ‘http://www.mathworks.com/matlabcentral/fileexchange/‘; options = weboptions(‘RequestMethod‘,‘post‘); data = webread(url,‘term‘,‘simulink‘,‘duration‘,7,options);
许多 Web 服务除了提供 GET 方法外还提供 POST 方法用于请求数据。
4.6将日期和时间指定为查询参数
从 NASA Earth Observation (NEO) Web Mapping Service 读取 2004 年 12 月的一幅“Blue Marble:Next Generation”图像。
使用 datetime
对象指定所请求的图像的日期。指定 D
的 Format
属性,使其格式与 Web 服务请求的格式相匹配。
url = ‘http://neowms.sci.gsfc.nasa.gov/wms/wms‘; D = datetime(2004,12,01,‘Format‘,‘yyyy-MM-dd‘); rgb = webread(url,‘Time‘,D, ... ‘Service‘,‘WMS‘,‘Layers‘,‘BlueMarbleNG-TB‘,‘CRS‘,‘CRS:84‘, ... ‘Format‘,‘image/jpeg‘,‘Height‘,256,‘Width‘,512, ... ‘BBOX‘,‘-180.0,-90.0,180.0,90.0‘,‘Version‘,‘1.3.0‘,‘Request‘,‘GetMap‘); imshow(rgb)
webread
转换 datetime
对象,以便它们可以作为 Web 服务查询参数的值。示例中的所有名称-值对组提供了由 NEO Web Mapping Service 指定的查询参数。
Blue Marble:Next Generation + Topography and Bathymetry 图像由 NASA 的 Earth Observatory 提供。NEO Web Mapping Service (WMS) 提供对图像和服务的访问权限。(请参阅 NASA Earth Observations 了解致谢名单和使用条款。有关 WMS 查询参数,请搜索 NASA Earth Observations 网站 https://neo.sci.gsfc.nasa.gov/about/wms.php。)
5.输入参数
5.1 url
- Web 服务的 URL
字符数组
Web 服务的 URL,指定为字符数组。Web 服务实现 RESTful 接口。有关详细信息,请参阅 RESTful。
示例: webread(‘http://www.mathworks.com/matlabcentral‘)
读取网页并以字符数组形式返回其 HTML。
5.2 QueryName1,QueryValue1,...,QueryNameN,QueryValueN
- Web 服务查询参数
名称-值对组
Web 服务查询参数,指定为一个或多个名称-值对组参数。QueryName
参数必须指定查询参数的名称。QueryValue
参数必须是字符数组或者用于指定查询参数值的数值、逻辑值或 datetime
值。数值、逻辑值和 datetime
值可以置于数组中。Web 服务定义作为请求的一部分而被接受的名称-值对组。
当您将 QueryValue
指定为 datetime
对象时,必须指定其 Format
属性,以便它与 Web 服务要求的格式一致。如果 Format
属性包含时区或偏移量,而 datetime
对象未设置时区,则 webread
会将 ‘Local‘
指定为时区。
当 QueryValue
在一个数组中包含多个值时,可能需要指定 weboptions
对象的 ArrayFormat
属性,以按照 Web 服务指定的方式对该数组进行表单编码。
示例: webread(‘http://www.mathworks.com/matlabcentral/fileexchange/‘,‘term‘,‘webread‘)
检索上传至 File Exchange 且包含单词 webread
的文件的列表。
5.3 options
- 其他 HTTP 请求选项
weboptions
对象
其他 HTTP 请求选项,指定为 weboptions
对象。
可指定 weboptions
对象的 ContentType
属性,并将该对象作为输入参数传递到 webread
。然后,webread
会将 data
作为该类型的输出返回。该表列出了您可以在 weboptions
对象中指定的有效内容类型。
ContentType 设定符
|
输出类型 |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
‘auto‘ (默认值)
|
基于内容类型自动确定输出类型。 |
|||||||||
‘text‘
|
内容类型的字符向量:
如果 Web 服务返回一个具有 |
|||||||||
‘image‘
|
image/format 内容的数值或逻辑矩阵。如果第一个输出参数是索引图像,第二个输出参数是颜色图,第三个输出参数是 alpha 通道。
有关受支持的图像格式,请参阅支持的导入和导出文件格式。 |
|||||||||
‘audio‘
|
audio/format 内容的数值矩阵(数值标量采样率作为第二个输出参数)。
有关受支持的音频格式,请参阅支持的导入和导出文件格式。 |
|||||||||
‘binary‘
|
二进制内容的 uint8 列向量,此处的二进制内容是指那些不能作为 char 类型进行处理的内容。
|
|||||||||
‘table‘
|
电子表格和 CSV ( text/csv ) 内容的标量表格对象。
|
|||||||||
‘json‘
|
application/json 内容的 char 、数值、逻辑值、结构体或元胞数组。
|
|||||||||
‘xmldom‘
|
text/xml 或 application/xml 内容的 Java? 文档对象模型 (DOM) 节点。如果未指定,则该函数将以字符向量形式返回 XML 内容。
|
|||||||||
‘raw‘
|
‘text‘ 、‘xmldom‘ 和 ‘json‘ 内容的 char 列向量。该函数将以 uint8 列向量的形式返回所有其他内容类型。
|
有关作为 weboptions
属性的所有请求选项,请参阅 weboptions
。
6.输出参数
6.1 data
- Web 服务中的内容
标量 | 数组 | 结构体 | 表
从 Web 服务读取的内容,以标量、数组、结构体或表的形式返回。
6.2 colormap
- 与索引图像关联的颜色图
数值数组
与索引图像关联的颜色图,以数值数组的形式返回。
6.3 alpha
- 与索引图像关联的 Alpha 通道
数值数组
与索引图像关联的 Alpha 通道,以数值数组的形式返回。
6.4 Fs
- 音频数据的采样率(以赫兹为单位)
正数值标量
音频数据的采样率(以赫兹为单位),以正数值标量的形式返回。
7.提示
- 有关 RESTful Web 服务函数不支持的功能,请参阅 HTTP 接口。
webread
支持 HTTP GET 和 POST 方法。许多 Web 服务同时提供 GET 和 POST 方法用于请求数据。要发送 HTTP POST 请求,请将options
的RequestMethod
属性指定为‘post‘
。但是,webread
将查询选项放入url
,而不是放入请求消息的主体。要将查询放入消息主体,请使用webwrite
。- 对于 HTTP POST 请求,
webread
函数仅支持application/x-www-form-urlencoded
媒体类型。要将 POST 请求与任何其他 Internet 媒体类型的内容一起发送,请使用webwrite
。
原文地址:https://www.cnblogs.com/mathpro/p/9023443.html