Swift中的HTTP请求体RequestBodies使用示例详解.docx

Swift中的HTTP请求体RequestBodies使用示例详解.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Swift中的HTTP请求体RequestBodies使用示例详解

目录正文通用化body空请求体EmptyBody数据体DataBodyJSON体JSONBody表单FormBody其他BodyOtherBodies

正文

在进行HTTPRequest请求发送前,我们稍稍改进一下我们的结构体,最后,我们将会以下面的信息输出:

publicstructHTTPRequest{

privatevarurlComponents=URLComponents()

publicvarmethod:HTTPMethod=.get

publicvarheaders:[String:String]=[:]

publicvarbody:Data

在本节中,我们将着重讨论一下body属性,并对其进行改造。

通用化body

在HTTP简介那一节,我们了解到,一个请求体是原始二进制数据,但是,在与WebAPI通信时,这些数据有多种标准格式,例如JSON和表单提交。

我们可以将其概括为一种给我们数据的东西的形式,而不是要求此代码的客户手动构造其提交数据的二进制表示。

由于我们不打算对用于构造数据的算法施加任何限制,因此通过协议而不是具体类型来定义此功能是有意义的:

publicprotocolHTTPBody{}

接下来,我们需要一种方法从其中一个值中获取Data,并在出现问题时选择性地报告错误:

publicprotocolHTTPBody{

funcencode()throws-Data

我们可以在这一点上停下来,但还有另外两条信息值得拥有:

publicprotocolHTTPBody{

varisEmpty:Bool{get}

varadditionalHeaders:[String:String]{get}

funcencode()throws-Data

如果我们能快速知道一个body是空的,那么我们就可以省去尝试检索任何编码数据和处理错误或空数据值的麻烦。

此外,某些类型的正文与请求中的header结合使用。例如,当我们将值编码为JSON时,我们希望有一种方法可以自动指定Content-Type:application/json的header,而无需在请求中手动指定它。为此,我们将允许这些类型声明额外的header,这些标头将作为最终请求的一部分结束。为了进一步简化采用,我们可以为这些提供默认实现:

extensionHTTPBody{

publicvarisEmpty:Bool{returnfalse}

publicvaradditionalHeaders:[String:String]{return[:]}

最后,我们可以将我们的类型更新到这个新的协议中

publicstructHTTPRequest{

privatevarurlComponents=URLComponents()

publicvarmethod:HTTPMethod=.get

publicvarheaders:[String:String]=[:]

publicvarbody:HTTPBody

空请求体EmptyBody

最简单的HTTPBody是无体。有了这个协议,定义一个空请求体也是很方便的。

publicstructEmptyBody:HTTPBody{

publicletisEmpty=true

publicinit(){}

publicfuncencode()throws-Data{Data()}

我们甚至可以将其设置为默认的主体值,从而完全消除对该属性的可选性的需要:

publicstructHTTPRequest{

privatevarurlComponents=URLComponents()

publicvarmethod:HTTPMethod=.get

publicvarheaders:[String:String]=[:]

publicvarbody:HTTPBody=EmptyBody()

数据体DataBody

下一个明显要实现的主体类型是返回给定的任何Dat

文档评论(0)

158****7369 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档