Tag: Api集成

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中的可测试网络层—第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 […]