Tag: alamofire

使用Django rest框架开发iOS客户端应用

在过去的几年中,我一直在使用Parse作为我的应用程序的后端。 但是,这并没有给我真正的自下而上的感觉。 两年前,我开始使用Django(高级Python Web框架),但由于它的难度和完整性(学习基础知识的机会较少),我经常对此失去兴趣。 但是,在尝试了其他流行的后端语言(例如PHP和NodeJS)之后,我决定坚持使用Django一段时间。 Django的主要功能是其管理界面,该界面可帮助开发人员尽快编写应用程序! 一年多来,我用它来制作几个个人项目站点,包括我的投资组合。 由于我在应用开发方面(iOS和android)的丰富背景,我想通过使用Django后端开发客户端应用来挑战自己。 因此,我在今年初启动了一个小项目来学习。 在本文中,我将解释如何设置Django rest框架并为iOS客户端应用提供rest api端点。 Django Restframework是现代的Web Api套件,支持Python(2.7〜3.5)和Django(1.7〜1.9)。 对于searchrestaurant应用,我的目标是最初提供以下端点。 为此,我使用了Google Maps Geocoding来获取搜索地点的纬度和经度,并使用Foursquare API来获取相应地点的餐厅(比萨饼,咖啡等)。 使用Django restframework创建REST API的第一步是声明模型的序列化器类。 序列化器和反序列化器的目的是以json的形式获取检索/发送数据。 我在应用目录搜索下的文件serializers.py中创建了RestaurantSerializer。 下一步使用此序列化程序并在api端点被命中时提供json数据。 所有api端点均由views.py中的RestaurantList类使用urls.py中的url(r’^ api / v1 / $’,views.RestaurantList.as_view())处理 首先,解析get请求以获取诸如location和rtype(餐厅类型)之类的参数,然后查询现有数据库。 如果不存在数据,则同时使用Google API和Foursquare API生成一组新的查询。 Foursquare返回的数据将保存在数据库中,并使用serializers类返回到api端点。 提供的代码段如下。 典型的请求和响应对象如下所示。 要求: https://searchrestaurant.pythonanywhere.com/api/v1/?format=json&location=oslo&rtype=pizza 回应: 请注意,我们得到JSON Array作为响应。 如果找不到数据,我们将收到以下JSON对象的响应 {“错误”:“未找到”,“状态”:“ 404”}

Criando uma Pokedex com Swift零件:2/3

消费JSON Recapitulando单方前。 无需安装CocoaPods,也可以使用API​​ Alamofire,也可以使用Xcode。 Criando uma Pokedex com Swift零件:1/3 Instalando o CocoaPods medium.com Hoje vamoscomeçaruma nova et et na nasóriadessa Pokedex maravilhosa que estamos criando。 Vamos colocar asmãosnocódigo,使用Alamofire(finalmente),使用JSON,使用criar解析tambémum模型,使用vamos utilizar na terceira eúltimaparte做教程。 您可以通过以下命令来完成全部任务。 Miciano / Pokedex 通过在GitHub上创建一个帐户为Pokedex开发做出贡献。 github.com De onde vamos buscar作为信息吗? Vamos使用RESTful 2版本的RESTful API,该信息可用于Atulizadas pela Bulbapedia。 RESTful API和pokeapi。 pokéapi–神奇宝贝RESTful API Pokeapi Pokemon RESTful API […]

使用Swift和Django Rest Framework将图像或文件上传到Django

最近几个月,我一直在开发开源Swift应用程序。 我需要使用rest框架将图像以及发布数据上传到Django。 虽然,有一些使用AF网络的Objective-C解决方案,但是我找不到一个很好的Swift解决方案。 使用Alamofire和Django rest框架非常简单。 我将解释以下步骤。 出于解释目的。 我将创建一个Django Model和序列化器类。 餐厅模型 REST API的餐厅序列化器 我们将在urls.py中添加rest api端点,并在views.py中添加逻辑。 在您应用的urls.py中添加以下内容。 url(r’^ api / v1 / list / new / $’,views.RestaurantList.as_view()) 我们都站在Django一方。 现在,是时候编写一些快速代码了。 首先,创建一个Podfile并添加pod’Alamofire’,’〜> 4.3.0’。 安装Pod之后,让我们创建一个多部分表单上传请求。 我不会编写用于从照片库中选择图像的其他代码。 您可以参考主存储库。 为此,您应该将Alamofire的上载api与多种格式的数据一起使用,因为我们要上载图像以及发布数据参数。 Django rest框架将负责其余的工作! 始终在其他参数之前为图像/文件添加multipartFormData 如有任何疑问,请随时在评论部分提问! 对于本博客,我假设:Swift 3.0,Xcode 8,Python 3.5,Django 1.10,Django Rest framework 4.0和Alamofire 4.0版本

使用Swift 3的IOS中的MVVM

当我们为最新的iOS应用程序奠定基础时,想向我们以前的iOS应用程序学习。 我们设定了两个目标: 避免Massive View Controller综合症 尽可能少的重复代码 iOS中的MVVM 自从最近出现更好的架构模式以来,MVC(模型视图控制器)设计模式就已经失去了其作为实际模式的地位。 现在,MVC被臭名昭著地称为Massive(或Messy)-View-Controller模式,其原因是在View控制器中堆积1000行以上的代码非常容易。 甚至苹果公司也以避开其示例代码中的MVC模式而闻名。 MVVM(模型-视图-视图模型)是一种体系结构模式,是MVC的替代方案,它可以使将ViewController的UI特定职责进一步隔离到视图模型变得更加容易。 在MVVM设计模式中, 模型与在MVC模式中相同,它表示简单数据。 视图由UIView或UIViewController对象以及它们的.storyboard和.storyboard文件表示,它们仅应显示准备好的数据。 ViewModel隐藏所有异步联网代码,用于可视表示的数据准备代码以及用于侦听Model更改的代码。 所有这些都隐藏在精心定义的API后面,该API建模为适合该特定View 。 使用MVVM的好处之一是测试,您可以在单元测试中更轻松地对其进行测试,而不会影响UI代码。 现在, 视图 ( UIViewController / UIView )变得更加简单,而ViewModel充当Model和View之间的粘合剂 。 在iOS Swift3中应用MVVM 如果您不熟悉MVVM,并且想深入了解如何在应用程序中实现和使用MVVM设计模式,请深入阅读本文,并附带示例示例。 我们将在此示例上演示iOS MVVM模式的用法。 简短地说,该应用程序显示一个用户列表,每个列表包含一个用户图像,其名称和电子邮件。 示例项目中使用的库: Alamofire:是一个用Swift(版本4.4)编写的HTTP网络库。 SDWebImage:该库提供了具有缓存支持的异步图像下载器。 Mapper:是一个简单的Swift库,用于将JSON转换为强类型对象。 步骤1:设定APIClient RANDOM USER GENERATOR使用的API,不需要密钥和授权令牌。端点是:http://api.randomuser.me/?results=10&nat=e 我编写了一个具有完成处理程序的downloadUser函数 。 JSON数据将以字典数组的形式返回,用于下面的关键“结果”。 步骤2:设置ViewModel。 #1:我创建了从NSObject继承的UserViewModel文件。 这将是我的View Controller中的属性,并由情节提要注入。 #2创建一个标记为@IBOutlet的apiClient属性,该属性将由情节提要实例化。 因为我知道情节提要将注入它,所以我可以使用(!)bang运算符,因为我知道它不会为零。 第3步:设置视图控制器。 用@IBOutlet声明UserViewModel属性,情节提要将实例化此ViewModel对象。 ViewDidAppear:在视图出现后调用-是使用userViewModel属性从API开始加载用户的好地方。 从API下载数据后,重新加载tableView以显示我们检索到的应用程序对象。 步骤4:如何使用情节提要定义Object属性。 从对象库中,将一个对象项目拖到视图控制器上,并将其插入VC的顶部。 […]

使用Alamofire快速检查互联网连接

我将medium.com视为一种将代码保存在远程位置的介质,以便可以从任何地方访问它。 这可能对别人没有帮助。 🙂 对于Swift 3+和Alamofire 4.4 ,我创建了一个名为Connectivity Swift类。 您可以使用Alamofire NetworkReachabilityManager类,并根据需要configure isConnectedToInternet()方法。 我只是在检查设备是否已连接到互联网。 import Foundation import Alamofire class Connectivity { class func isConnectedToInternet() ->Bool { return NetworkReachabilityManager()!.isReachable } } 用法: if Connectivity.isConnectedToInternet() { print(“Yes! internet is available.”) // do some tasks.. } 编辑:由于swift鼓励计算的属性,您可以更改上述函数,如: import Foundation import Alamofire class Connectivity { class var isConnectedToInternet:Bool { return NetworkReachabilityManager()!.isReachable […]

Fazendo下载快速格式的图像

最新图片或Alamofire图片 Olágalerinha。 Dessa vez vim mostrar算法和简单应用可用于下载iOS上的免费图像。 Para quem acompanhou um tempoatráscoloquei em 3 passos como criar uma pokedex。 Criando uma Pokedex com Swift零件:1/3 Instalando o CocoaPods medium.com Criando uma Pokedex com Swift零件:2/3 Consumindo um JSON medium.com Criando uma Pokedex com Swift零件:3/3 Mostrando nossos monstrinhos medium.com Nessa pokedex temos o列表下载口袋妖怪图片。 Eles foram feitos包含API Alamofire。 Alamofire / […]

引入AlamofireSafariLogger —一个轻量级的Alamofire网络通话监控库

在开发周期中,我花了大量时间进行网络调试。 在android中,我们有Stetho。 我可以在没有Android Studio的Chrome网络检查器上查看所有请求和响应。 在iOS开发中,我使用控制台日志或Charles,这需要在特定的macOS上进行一些设置(或许可)。 我已经在iOS开发上找到了Stetho等效的设备,但是它没有简单的解决方案。 我写AlamofireSafariLogger是因为我想更轻松地进行网络呼叫调试。 最终结果是,我记录了从Alamofire到Safari Web检查器的所有请求和响应。 与Stetho不同,我不是在“网络”选项卡中而是在“控制台”选项卡中登录。 最终结果如下所示。 设定 pod’AlamofireSafariLogger’ 在您的appDelegate中, func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->布尔{ //添加此startLogging()行 AlamofireSafariLogger.shared.startLogging() // … } 而已。 现在,您需要在Safari中启用开发菜单。 在Safari Perference>高级>选中“在菜单栏中显示开发菜单” 如果您要使用设备进行调试,请打开“设置”> Safari>“高级”>启用“ Web检查器”。 当您的应用程序运行时,您会在开发人员标签下找到“ about:blank”。 单击它,您现在可以使用Web检查器调试alamofire网络通话! 当前设计中的控制台日志级别: 标题:日志 身体:警告 错误:错误

使用Swift中的路由器为IOS应用程序更好地路由

在这篇文章中,我将讨论在我正在努力使IOS应用程序开发更强大的项目中使用的其他可重用类。 我最近需要导航路由器来处理网络请求中不同类型的URL,处理一堆.GET,.POST,.PUT。 删除HTTP请求类型等 使用单独的类来处理网络任务是一个好主意。 因此,使用自定义路由器。 它当然是基于Alamofire。 什么是路由器? 路由器是一种处理API /微服务url的面向协议的方法,但将自身用作枚举是一个更好的主意。 通过从枚举案例中生成URL请求,这将无缝地在发出请求时帮助统一和简化网络路由。 因此,另一种方法启发了我一些概念,您可以阅读LittleBitesOfCocoa中的博客文章。 公平地说,它更轻巧,但不能满足我的要求。 #93:为Alamofire创建路由器🔀🔥 Alamofire 3.0(https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md…littlebitesofcocoa.com 创建路由器协议 首先,创建一个协议RouterProtocol来处理四种方法,以使REST兼容(获取,发布,更新,销毁),以处理常见的API请求(我刚刚声明了自己的ApiType来获取API URL的路径/路由,因此不是)在上下文中,则省略。) 接下来要做的就是创建一个路由器枚举 ,这个实现为什么呢? 我会解释。 首先,我们需要遵循RouterProtocol才能使用我们的功能。 Router枚举必须为通用类型,必须接受具有RouterProtocol一致性的任何类型的结构。 它接收四个动词(.GET,.POST.PUT,.DELETE等),因此可以为其声明方法,路径和路由属性。 将URLRequest属性创建为NSMutableURLRequest,因此添加常用配置,例如方法,默认标头,OAuth令牌(如果可用)等。 最后,使用Alamofire的参数编码可以执行所需的编码。 用法 使用路由器非常简单,只需在ApiManager中声明一个方法(我将在另一篇文章中介绍我的ApiManager版本) 在我的示例中,getAccounts方法将AccountsRequest作为输入 ,response作为AccountsResponse作为输出,此类仅是结构,您可以自己滚动 (仅供参考:在另一篇文章中,我将向您介绍基于“请求/响应”结构的方法) 您的经理(当然,它封装了Alamofire实例)会执行请求(可到达性和微调器内容不在上下文中。我会在此处发布有关可到达性的信息,您可以在此处阅读) Alamofire管理器将Router枚举作为输入,并具有我们的RouterProtocol,我们说这是一个.GET请求,所以我确实将诸如accountRequest.accountId的值作为String传递,因为在协议中。GET匹配请求具有“ case get(T,String) ” 如果我们需要说这是一个.POST请求,则协议.POST可以将 [ String:AnyObject])作为参数,因此,这一次我必须将我的accountRequest输入传递为cast到Dictionary()? [String:AnyObject])等 简单! 例如; Router.get(AccountsRou​​ter(),accountRequest.accountId!)。URLRequest 现在,您可以看到为任何种类的Api创建任何种类的Router都具有表现力。 它始终严格定义,可理解且干净。 这篇文章中的代码,托管在Github中 seyhunak /路由器 在Swift github.com中使用路由器为IOS应用程序更好地路由 感谢您的阅读,希望您喜欢。

iOS:使用Alamofire + Kakapo在Swift中模拟服务器行为和响应

在Tiendeo Mobile部门,我们一直在寻找新的方法来使我们的应用程序更具可测试性和更好的测试。 让我介绍有关数据层的基本概念。 如果您熟悉Alamofire和AlamofireObjectMapper,则我们的应用程序数据层将使用一个名为AuthenticationSessionManager的自定义Alamofire SessionManager类,该类可实现RequestAdapter和RequestRetrier协议。 我们的AuthenticationSessionManager有自己的请求方法,可以在调用Alamofire请求方法之前检查用户令牌是否有效: 首先,我们创建一个称为AuthenticationSessionManagerTest的单元测试测试类,并实现一个方法,该方法返回无效令牌,并使用Kakapo的Router类实现另外两个方法来设置拦截器,用于两个成功的API调用: 然后,我们需要配置我们的自定义SessionManager以使用Kakapo协议。 我们将创建一个方法来创建自定义URLSessionConfiguration : 并且…我们已经完成了测试的// Given部分: 总结一下:我们已经有一个配置有Kakapo和无效令牌的sessionManager 。 我们还有两个API调用可供拦截。 💪 现在我们必须实现测试的// When和// Then部分。 我们将使用sessionManager向“ _api / Fake”发出请求,该请求将被拦截。 正如我们在文章开头所看到的sessionManager , sessionManager将首先检查令牌,但是令牌将无效…… sessionManager自动向“ _api / TokenNew”请求新的令牌,该令牌也将被拦截。 当获得新令牌时,最终它将调用“ _api / Fake” ,其响应将成功。 🎊 让我们看一下代码: 这是测试的样子! 我们使用expectation来检查响应的值是否与我们为Kakapo路由器设置的值相同。 从这里开始 以此测试为样本,我们可以创建多个测试方案来测试我们的SessionManager,如下所示: 有效令牌 伪API调用成功 要么: 没有令牌 刷新令牌API调用成功 伪API调用成功 要么: 有效令牌 伪API调用响应401 等等 只是改变 //给出条件并向Kakapo的路由器添加新的响应。 希望您发现这篇文章有趣并且对您的项目有用。 任何问题或评论都将受到欢迎! […]

使用Alamofire和EVReflection自动映射和解析JSON

我经常使用Alamofire进行HTTP联网,这是用Swift编写的流行联网库。 因此,它是极其强大的库,易于使用,但是在进行网络操作时,我经常需要抽象层来封装Alamofire而不是直接调用它。 我在过去的项目中确实使用Moya作为抽象,所以基本上,它提供了Manager类来定义端点,请求参数等的明确用法。因此,我确实创建了自己的Manager单例来管理这些东西。 在设计模型时,我们需要为每个请求的JSON值实现映射,并为我的模型实现响应周期 ,但是如果响应JSON结构经常更改(需求可以快速更改,可以快速转换请求/响应),那将是痛苦的。 我以前有在Swift中使用Reflection的经验,所以确实有机会在新项目中尝试EVReflection。 什么是EVReflection? EvReflection是一个带有反射功能的Swift帮助程序库,该功能支持NSCoding,Printable,Hashable,Equatable和JSON。 将基于NSObject的对象解析为字典。 将字典解析回一个对象。 从字符串值创建一个类并获取一个类的字符串值。 支持NSCoding方法encodeWithCoder和decodeObjectWithCoder 使用所有属性时,支持可打印,可哈希和等于。 (支持Swift 1.2中的Set) 将对象解析为JSON字符串,并将JSON字符串解析为对象 从EVReflection中裁剪 实施请求/响应模型 首先,我们需要设置从EVReflection(EVObject)基类继承的请求/响应模型。 适用于所有请求的BaseRequest,适用于应用程序中所有响应的BaseResponse以及用于解析错误JSON结构 (如果存在)的ErrorResponse (如果接收到用于警报,通知等的错误响应对象) 因此,如果JSON中包含错误有效负载以进行映射,则需要对其进行解析。 我们可以传递额外的默认值,例如应用程序的当前版本,内部版本号或任何其他数据。 然后,在下面的示例中,我们可以简单地声明从BaseRequest / BaseResponse类继承的Request / Response模型。 因此, 从EVObject继承的模型将自动进行映射 。 另外,如果您需要使用某些值作为请求/响应,我们可以通过实例化类来设置默认值 最后,定义一个采用请求参数(BaseRequest)和完成处理程序响应(BaseResponse)的方法为我们提供了完成处理程序。 (我们也可以在此处进行网络状态检查等。) 好处 我们不需要为模型编写映射或为JSON响应(以及请求)使用某些映射库。 我们确保正确定义了请求/响应周期 ,我们完全知道请求的内容,并且知道响应应该做什么。 我们确实使用可达性检查了网络状态 (您可以自己实施) 我们通过Alamofire的validate()方法确保它是经过验证的响应。 它会自动验证 200…299 范围 内的状态码 ,并且如果提供的话,响应的Content-Type标头与请求的Accept标头匹配。 我们有AccountResponse(BaseResponse)和错误(如果有)作为响应 我们使用了AlamofireJSONToObjects库, 该库使用EVReflection (作为Alamofire扩展名) 将JSON响应数据转换为Swift对象 。 我们拥有干净,可测试的实现,可以重复使用以支持不同的API请求。 这是创建请求的示例方法 […]