Tag: api

使用Vapor 3支持推送通知

TLDR; 在Swift中执行cURL命令 几周前,我决定学习Vapor 3框架。 我希望能够为将来的项目开发后端API,而不必依赖我的goto Parse Server。 这是一个快速的入门指南,向您展示它的可能! 所有代码都在底部链接的GitHub存储库中提供。 为了获得有关该框架的经验并查看一些用例,我从Ray Wenderlich的网站购买了“带有Vapor的Server Side Swift”电子书。 我通读了这本书,以学习基础知识。 下一步是开始尝试将以前使用Parse Server的功能移植到Vapor 3应用程序。 当实现推送通知时,我遇到了一个障碍。 Apple的APN要求使用HTTP / 2建立连接,但是SwiftNIO(Vapor 3的核心网络依存关系)尚不支持HTTP / 2协议。 我以为我可能必须使用某些第三方解决方案,但由于我不想要这种依赖关系。 我决定仔细阅读Apple的开发人员文档(APNs-Apple Developer),以了解使用cURL连接APN所需的条件。 首先,您需要一个付费的Apple Developer帐户和一个为其配置了推送通知的演示应用程序。 您将需要运行演示应用程序并获取设备令牌,该令牌将在以后发送以测试APN。 HTTP / 2 cURL请求将需要证书。 第一步是从Apple开发人员帐户生成所需的证书。 由于已经有数个教程,因此我将不介绍如何执行此操作。 .cer文件和.p12文件将需要合并。 为此,请遵循以下bash脚本: #!/ bin / bash #将.cer文件转换为.pem文件: openssl x509 -in aps_development.cer-通知der -out cert.pem #将私钥的.p12文件转换为.pem文件: openssl pkcs12 -nocerts -in aps_development.p12 […]

iOS中的网络调试-netfox

如今,许多应用程序都使用某种HTTPS API,其中有大量的库(Alamofire,Moya,AFNetworking等),并且我在Medium上看到了许多有关网络体系结构的文章。 但是有一件事,几乎没人谈论—网络调试。 错误是软件开发的正常部分,可以在它的每个部分(包括网络)中找到。 什么是netfox? 对于任何需要在其应用程序中调试网络的iOS或macOS开发人员而言,Netfox都是一个很棒的库。 您可以在netfox GitHub README中阅读有关它的更多信息。 Netfox入门 使用netfox入门非常简单。 它支持两个主要的依赖管理器-CocoaPods和Carthage。 // CocoaPods pod’netfox’ //迦太基 github“ kasketis / netfox” 如果您希望手动将库添加到项目中,请 参阅netfox GitHub README中的说明 。 添加库后便是最好的部分-要启用netfox日志记录,您只需向AppDelegate添加一行代码即可。 就这样,您不需要任何其他东西,也不管您如何处理网络请求(Alamofire,AFNetworking等)。 NFX.sharedInstance()。start() 将此行添加到AppDelegate,didFinishLaunchingWithOptions中。 不要忘记导入netfox。 查看您的日志 Netfox将在后台记录您的所有网络请求。 有两种方法可以打开netfox日志屏幕(图2): 1)手势 NFX.sharedInstance()。setGesture(.shake) 在您的AppDelegate中的“ NFX.sharedInstance()。start() ”下添加以下代码行。 要打开网络日志屏幕,只需摇动您的iPhone,它将自动打开。 2)代码: NFX.sharedInstance()。show() 这行代码也将打开网络日志。 例如,您可以在按钮的@IBAction中调用它。

Swift 3中的API.AI

目的 我希望到本文结束时,您将像老板一样,学习如何在自己的Swift 3项目中实现API.AI。 这篇文章是我一段时间以来收集到的信息的汇总,并认为这对分享很有帮助。 一个帖子,面向有意构建自己的机器人或在互联网上发现不足/过时信息的人们。 如果您阅读了我以前的博客文章,您会知道我对API.AI缺乏相关支持的感觉。 过时的资源和大量的挖掘工作。 这是您可以遵循的直线指南。 先决条件 在继续之前,强烈建议您对API.AI有足够的了解。 如果这是您第一次了解API.AI,请查看API.AI简介。 除此之外,让我们开始吧。 项目构想 在写完上面的标题后,我决定花15分钟的时间提出一个简单而有意义的AI项目构想。 我已经决定我们要构建一个交通信号灯机器人应用程序。 我想要一个简单且适用的项目。 我们将拥有一个了解我们的机器人。 根据我们的输入更改屏幕上的颜色。 我们还将有一个与我们对话的机器人。 设置API.AI 再说一次,如果您还没有签出API.AI指南,我强烈建议您在继续之前进行操作。 这里。 让我们从打开API.AI开始。 然后登录,我们应该在主控制台上。 现在创建一个名为“ Traffic-Master”的代理。创建一个名为“ change.color”的意图。 用红色,黄色和绿色条目创建一个“颜色”实体。 还添加同义词,如停止,减速和前进。 我们可能想用动词来指代这些颜色,例如“向我展示停止色”。 现在转到我们刚才创建的“ change.color”意图。 输入您的意图的用户表达式。 例: 太酷了,现在让我们向下滚动到“响应”部分。 在文本响应下添加以下两行: am! 我是彩色的! 玫瑰是红色的。 紫罗兰是蓝色的。 我只是将颜色更改为只适合您的颜色。 我们刚刚教我们的机器人如何以文本形式响应更改颜色的意图。 我们给了它两种响应方式,所以我们的机器人不是那么平淡。 机器人的行为将与人类更相似。 您向漫游器添加的变化越多,漫游器对您的响应方式就越多 。 它太酷了。 在API.AI上测试 现在,我们将测试我们的机器人。 向右看,您应该看到一个要测试的空间。 按下麦克风按钮,然后说“给我看红色”。或者直接输入。 然后尝试“该走了。”记住,我们将go设置为绿色等。还要注意我们的机器人的两个不同响应。 太好了,我们的流量管理员了解我们! 现在将“ change.color”作为我们的操作,然后按保存。 […]

自动生成Swift网络模型– JustBinary

自动生成Swift网络模型 永远不要再编写网络模型。 无论您是移动开发的新手还是经验丰富的移动开发人员,您都很可能会遇到将API集成到移动应用程序中的情况。 将JSON转换为可用模型的艺术可能是乏味的,也是一项令人讨厌的工作。 出于本文的目的,我们将使用下面的Library JSON响应来生成我们的Swift网络模型。 下一步 ModelSynchro目前正在积极开发中,仍然可以添加一些很酷的功能。 我一如既往地重视反馈,并鼓励对改进此广告连播的任何想法。

iOS应用程序的请求和响应

介绍 我们都准备从监视和分析应用程序与服务器之间的通信开始。 在完成流量分析的设置之后,我们将不再等待开始。 请参阅上一篇文章,以获取有关设置Burp Suite的帮助。 关于HTTP的简介 HTTP是Internet的语言。 正如我们与人交流一样,iOS应用程序也与应用程序服务器进行交流。 一个简单的区别是,一个人只能提出问题(请求),而另一个人只能回答那些问题(请求)。 所有这些通信都必须使用共同商定的语言(HTTP)进行。 让我们直接了解我们所要求和回应的意思。 资料来源: http : //www.steves-internet-guide.com/http-basics/ 上图显示了应用程序发送到服务器的HTTP请求的典型格式以及作为响应收到的响应。 响应由应用程序分析,必要的行为会在UI上向用户显示内容。 要了解有关HTTP基础知识的信息,请参阅 http://www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html。 移动应用程序的典型工作流程 这些天,其他所有移动应用程序都遵循如下所述的工作流程: 登录前屏幕 —这些信息可能包括诸如搜索页面,关于页面,联系页面,注册页面等信息。 登录屏幕 -应用程序可以向用户提供任何数量或类型的登录过程。 最常见的登录过程使用手机号码,电子邮件地址或用户ID,并将其与单点登录密码,OTP或任何其他参数结合在一起以标识用户。 应用程序功能 -包括应用程序为其最终用户提供的主要功能。 它可能涉及交易,社交网络,电子商务等。 注销功能 -应用程序还可以提供可选的注销或类似功能,以结束用户在移动设备上的会话。 恢复功能 -此功能对于开发人员也是可选的。 它可能被标记为忘记密码或任何其他类似的名称。 识别请求和响应参数 一旦了解了目标应用程序的工作流程,我们就可以推动自己揭开应用程序工作流程背后的秘密。 “秘密”是指使功能成为可能的请求的输入和输出。 用技术术语来说,这些“秘密”被称为参数。 因此,我们有请求参数和响应参数。 典型的请求参数可能是以下之一: PATH参数 :它们出现在URL本身中。 考虑下面的请求行。 GET / api / profile / users / 2 HTTP / 1.1 […]

海鸥和服务器端Swift

在开发REST API时,关键是选择正确的框架。 Swift有一些很棒的框架:Kitura,Perfect和Vapor。 所有这些框架都有很多功能,支持缓存,数据库以及其他不同的功能。 但是它们太大而又复杂。 我最喜欢的Golang框架是gin-gonic。 小巧,快速,优雅。 除了路由外没有什么-这是主要思想。 我一直在尝试为Swift创建类似的东西。 小巧,简单,并且具有与gin-gonic接近的API意识形态。 所以,这是海鸥 让我们看一些示例。 这是在Seagull上编写的简单REST API服务器。 Seagull的两个主要部分是Router和Engine 。 路由器是您的API的说明。 如何绘制和处理不同的路线。 Engine是Seagull的心脏,您可以使用Engine启动服务器。 我想,从示例中可以明显看出如何添加新路线。 只需调用Router方法add并传递httpMethod ,相对路径和处理程序即可。 路由器支持组(这是我在gin-gonic API中最喜欢的部分)。 组是一种将具有相似路径前缀和中间件的API分组的方法。 关于处理程序和中间件。 一些样本。 样本从模型定义开始。 所有模型对象都是可编码的 。 Handler是一个具有两个参数SgRequest和SgRequestContext并返回SgResult的函数 。 Seagull支持中间件链。 中间件处理程序按顺序调用,以将其添加。 中间件可用于日志记录,安全检查或其他目的。 中间件处理程序能够返回将在下一个中间件处理程序或请求处理程序中使用的修改后的请求上下文。 这是一个很好的中间件示例。 我们正在从请求中检索令牌并将其添加到上下文中以供将来使用。 如果找不到令牌,则返回错误。 在这种情况下,链会受到干扰,服务器将返回错误。 您可以在Github上找到完整的Seagull资源。 该项目正在积极开发中,但已准备好进行实验。

使用URLComponents和URLQueryItem在Swift中构建安全URL

构造URL是每个Swift开发人员在构建iOS应用程序时都会执行的一项日常任务。 确保我们构建的网址安全且使用百分比编码格式正确编码非常重要。 构造URL的最简单且最容易崩溃的方法是使用传递原始字符串的URL Struct String initalizer。 让 searchTerm =“ obi wan kenobi” let format =“ wookiee” 让 url = URL(字符串:“ https://swapi.co/api/people/?search= \(searchTerm)&format = \(format)“)! //异常(致命错误)! 虽然它适用于没有查询参数的简单URL,但是当我们手动将查询参数添加到未使用百分比编码正确编码的字符串时,就会出现不安全行为。 手动为每个查询参数附加字符串的过程也很容易出错。 输入URLComponents和URLQueryItem 为了解决此问题,Apple的Foundation框架实际上提供了两种类型的Struct,我们可以将其用作构建带有安全查询参数的URL的构件,它们是URLComponents和URLQueryItem 。 URL由许多部分组成,例如方案,主机,路径和查询。 使用URLComponents结构,我们可以通过手动指定方案,主机和路径来安全地构建URL。 为了安全处理查询参数的百分比编码, URLComponents还公开了queryItems作为属性。 QueryItems是URLQueryItem的数组,我们可以使用URLQueryItem初始化程序传递查询参数的名称和值。 通过分配queryItems数组, URLComponents将在内部添加查询参数的百分比编码。 将键值字符串的字典映射到URLQueryItem数组 我们可以使用的另一种有用模式是将查询参数封装在具有String作为键和值的Dictionary内。 我们使用一个接受Dictionary的变异函数向URLComponents添加扩展,然后使用每个项目键和值将Dictionary映射到URLQueryItem数组,然后将其分配给URLComponents queryItems属性。 使用URLComponents和URLQueryItems构建SWAPI API存储库(示例) 这是一个示例,说明如何使用URLComponents和URLQuery项目作为每个端点的构建块来构建Remote DataRepository类。 我们还将为每个Planets, Spaceships, Vehcicles, People, Films, Species, Wookiee format, JSON format […]

Swift中的可测试网络层—第1部分

在编写程序时,根据编码最佳实践,代码应具有可读性,可维护性和可测试性 。 “无法测试的代码存在缺陷。” 作为iOS移动应用程序开发人员 ,我们经常编写许多涉及UI,网络,持久性和其他业务逻辑的代码。 在本文中,我们将共享我们的网络层实现,该实现处理API / web-service交互,以帮助编写有关网络层逻辑的测试。 在编写测试之前,我们需要熟悉如何将网络层代码与UI相关代码和其他业务逻辑分离。 没有这种去耦,就不可能孤立地测试网络层。 网络层包括: 准备请求 (URL,方法类型,标题,参数) API调用 (NSURLSession) 解析响应 (将数据转换为模型对象(或返回错误消息) 网络层测试使我们能够确保API请求已正确形成,并且API响应解析已按预期完成,从而模拟了Web服务器。 根据我们的测试方案,我们将需要进一步分离网络层。 为此,我们将创建一个APIHandler,该APIHandler用于发出请求并解析响应。 遵循APIHandler ,请参阅以下有关LoginAPI的示例请求/响应处理程序。 Path() -不用担心Path()。login 。 Path()只是一种根据DEV / TEST / RELEASE环境返回特定端点的方法。 更多详细信息可以在这里找到。 所有API请求都将包含url,httpMethod,参数和标头 。 set —由于上述示例API调用是一种post方法,因此我们需要准备httpBody,这是通过RequestHandler协议扩展来完成的。 BaseRequest对于所有常见的请求配置(例如标头,timeoutInterval等),我们可以创建一个符合Request Protocol的 BaseRequest类, 如下所示。 设置好通用配置后,每个API可能会有要在API请求中发送的自定义参数。 对于需要身份验证令牌的任何API,我们可以使用AuthRequest对象而不是BaseRequest对象,以便API请求具有auth-token。 现在,我们已根据需要准备了URLRequest 。 准备好API请求后,我们可以调用API(我们将在一分钟内逐步完成)。 放置API调用并且服务器响应后,我们将收到需要根据我们的要求进行解析的原始响应。 通常,我们将原始响应解析为模型对象。 为此,我们可以使用泛型来处理ResponseHandler中的响应 。 上面的代码处理来自服务器的success , known-error和unknown-error api响应 为了调用API,我们编写了一个通用类APILoader ,该类使用可达性库处理网络错误,URLSession和Internet连接错误,如下所示。 我们可以将LoginAPI对象传递给通用APILoader […]

Swift中的JSON(De)Serialization

现在,我已经启动并运行了Node.js服务器,接下来我将继续研究应用程序的客户端。 我必须解决的第一个任务是进行API调用和处理JSON响应。 在本文中,我将引导您完成代码以完成此任务。 第一步是创建可JSONifiable的类。 值得庆幸的是,很多功能是预先内置在swift中的。 在这里,我将使用JSONEncoder和JSONDecoder处理对象的序列化和反序列化。 我添加了两个函数来封装它,encode()可以将一个对象转换为可以传输到服务器的JSON数据,decode()可以将数据转换为Swift对象。 您可以在下面看到如何使用它的示例。 下一部分将使用此Transmittable协议使用JSON主体对服务器进行API调用,并接收和处理响应数据。 这个APICaller类的主要功能是对服务器上的端点执行API调用。 该函数采用一个端点(“ / users”),一个方法(“ POST”),一个请求主体(一个User对象)以及响应类型(User.self)。 它调用createURLRequest()来格式化URLRequest对象。 然后,它使用URLSession调用后端。 接下来,我们检查HTTP响应代码。 除200(或200s之外的其他任何代码)之外的任何代码均表示呼叫成功通过了网络,但是服务器引发了错误。 如果所有检查都通过,我们将反序列化服务器返回的数据并调用完成处理程序。 在上面的示例中,我们使用User对象主体对/ users端点进行POST调用。 在这种情况下,我们还将在服务器的响应中返回User对象。 希望这对您的项目有所帮助。 始终欢迎提出问题,评论和更正。

验证您的移动应用程序依赖的内部API响应

跟踪内部API的更改并不总是那么容易。 在开发过程中,当每个人都被淹没,有据可查,有针对性的更改仍然可能使API用户感到惊讶。 为了轻松跟踪内部API的更改,某种自动的API响应监视器将很有帮助。 JSON模式 JSON模式定义了JSON响应的模式。 我们使用ajv来验证我们的模式。 为了帮助入门,我建议使用tuts +教程,在这里您可以找到有关JSON Schema的关键功能的出色介绍。 除了本文提到的内容外,我还有一些其他提示: 使用模式生成器-JSON模式非常冗长。 如果您对验证的响应很大,那么手写模式可能非常繁琐。 尝试json-schema-generator。 它仅支持JSON Schema规范的草案4(截至2018年5月6日)。 手动转换为最新草案应易于管理(迁移指南)。 安装ajv的命令行界面(ajv-cli)以通过终端运行ajv。 白名单方法—为了跟踪JSON密钥的添加和删除,我的架构被定义为将现有密钥列表列入白名单。 如果有新密钥或删除了现有密钥,则验证失败。 下面的要点说明了这种方法。 您可以安排测试每小时进行一次(如果您注册付费帐户,则可以进行更高频率的测试)。 我对断言非常满意。 它可以验证API响应,同时可以兼作API状态和性能监视器。 这是一个巨大的安全网!