Tag: Rest Api

使用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”}

在Swift中的UITableView(客户端和服务器端)中加载更多

调用Rest API并在UITableView中滚动时检索大量数据 介绍 我一直想知道移动应用程序如何通过在需要时以便捷的方式加载向下滚动来加载更多数据,从而管理UITableView和UICollectionView显示的数据。 我还试图从服务器端以及客户端对这个问题找出一个全面的观点。 好吧,所以我们在这里尝试承担这个常见问题的负担,并以这种方便的方式简化答案。 我们走吧。 👶 场景: 我们将使用PHP Laravel框架(服务器端)实现Rest API,它将在每次调用中返回最新的feed作为大量数据(20项)。 迅速的代码可以使用API​​向下滚动以加载更多数据。 服务器端 : 该API将返回大量数据,例如ex。 每个呼叫分别以降序排列20个订阅源。 这样,第一个呼叫的最新20个提要,第二个呼叫的最近20个提要之前的下一个..依此类推。 take(20) :将查询返回的结果数限制为20。 skip(0) :跳过查询中给定数量的结果。 这样,在第一个调用中, skip(0)不会跳过任何提要,而在第二个调用中, skip(20)会跳过前20个提要,并检索最近的2o个提要之前的下一个提要,依此类推…… skip(40),跳过(60) …等等。 公共函数 getData($ bulk_no) { return Feed :: orderBy ( ‘created_at’ , ‘desc’ )-> skip($ bulk_no)-> take(20)-> get(); } 客户端 : 嗯,有许多基于swift的库用于执行HTTP请求。 其中最好的之一是Alamofire。 由于其简单性并减轻了网络任务的负担,并提供了用户友好的请求/响应方法。 ViewController将实现UITableView,在cellForRowAt委托方法将如下所示: var bulk_no = 0 […]

验证您的移动应用程序依赖的内部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状态和性能监视器。 这是一个巨大的安全网!

如何在IOS App中监视网络请求

在这篇文章中,让我们看看如何在IOS swift应用程序中监视和调试网络请求。 在此演示中,使用了Swift 4.1。 让我们从创建一个新的IOS swift项目开始。 现在,打开Storyboard并创建一个新按钮,然后通过创建一个动作函数将其连接到ViewController。 现在,我们创建一个名为requestData()的方法,在其中编写所有网络代码。 让我们使用session.dataTask() 现在让我们创建一个URL。 转到Intercept.rest并创建一个新的Intercept帐户。 通过提供端点URL作为所需的API URL来创建新的拦截器,然后单击“ 创建”按钮。 现在,复制已生成的新URL 。 现在打开代码,并将新生成的URL粘贴为常量URL的值,然后运行该应用程序。 按下我们创建的按钮,同时检查拦截器仪表板。 现在,您可以监视所有网络请求。 按下“扩展”按钮以查看完整的JSON响应。 Intercept.rest使您可以调试和监视API请求和响应。 它类似于Chrome开发者工具中的“网络”标签,但适用于任何API:移动应用,网络挂钩,前端等。

在蒸气上具有Swift的REST API

今天是个好日子! 最近,我需要一个服务器端存储,其中包含针对JSON数据文件的某种发现服务。 所以我把自己拆开了: 作为服务器端工程师,我的一部分正在努力将文件与另外一个JSON文件存储在Amazon S3上,以作为可用数据的发现信息。 作为iOS上的客户端工程师,我的另一部分是渴望在Swift中找到一些Web服务器框架并使用它。 经过一番与自己的斗争,由于以下事实,我决定提出这个职位: 最近,我主要忙于在Swift中开发iOS应用。 实际上,我非常渴望看到与更传统的服务器技术(例如Java,JavaScript等)相比,服务器上的Swift有何不同。 在本文中,我将实现一个简单的REST API Web服务器,该服务器能够提供由唯一ID标识的JSON数据,在本例中,一部分数据将表示为从Adobe After Effects(AAE)导出为JSON的动画。 (读为“某些JSON对象”)。 所以,让我们开始吧! 制备 在快速阅读了这篇有关大多数流行的基于Swift的Web框架(如Kitura,Perfect和Vapor)的有趣文章之后,由于它的快速开发特性(即Ruby on Rails和周围的活跃社区),我决定选择后者。 不过请注意-我并不是说这是最佳选择。 因此,让我们创建一个空的Vapor项目。 首先,我们需要遵循此准则安装Vapor框架及其命令行工具。 安装完Vapor之后,创建新项目非常简单,只需在Terminal中运行以下命令即可: $ vapor new AnimationsProviderServer 生成Xcode项目以简化我们服务器的开发也很有用: $ vapor xcode 至此,我们应该准备好打开甚至运行Xcode项目! 该服务器将在默认的8080端口上可用,因此您可以在浏览器中打开“ http:// localhost:8080” URL并检查其是否有效。 简短说明 :在撰写本文时,Vapor不支持开箱即用的“热重装”功能,但是可以通过NPMJS上可用的gulp-vapor软件包进行设置。 瞧,现在让我们编码一下! 资料模型 现在是时候向服务器添加一些逻辑了。 让我们创建一个模型实体来保存有关动画的信息,现在,表示动画所需的一切就是从Adobe After Effects(AAE)导出其标识符和JSON数据。 因此,动画模型可能如下所示: 注意:确保将导入的JSON文件添加到“ App”目标中。 数据存储 我们需要某种方式访问​​导入的动画资源,以实现可能想要实现某种存储实体的方式,我们将其称为AnimationsStorage: 为了使AnimationsStorage服务在Vapor控制器中可用,我们应该在configure.swift文件中注册它: 基本上,将configure.swift文件视为有关所有可用全局服务,实用程序等的信息源。 REST API 接下来,让我们创建一个简单的控制器,该控制器通过HTTP […]

使用Xcode 9和Swift 4从头开始学习iOS 11应用开发

如果您是编码初学者,并且想从事iOS开发工作,那么此课程适合您。 如果您想从Objective-C切换到Swift,那么请选择此课程。 这是学习完整的iOS开发的非常不可思议的全面在线课程。 这门课程不仅是学习Swift 4的最简单方法,而且还是制作iOS应用程序各个方面的真棒回顾。 于安琪(Angela Yu) “本课程的讲师”非常棒,他花时间仔细但迅速地描述了需要做的事情。 在这里查看 我会将本课程推荐给任何想学习如何制作iOS / Swift应用并使其成功的人。 本课程为48.5小时,满分为5,满分为4.8。 本课程教您以下内容: 您可以构建任何想要的应用程序 如何为您的业务构建成熟的应用程序 完成本课程后,您可以作为自由iOS开发人员 您可以使用Apple的新ARKit精通制作增强现实应用程序 如何使用Apple的新CoreMl构建您的第一个机器学习应用程序 和更多

选择您自己的代表

通过提供相同数据的多种表示,HTTP API可以对客户端更友好 当客户端从API请求数据时,它可能只需要可用字段的子集,但是许多API仅提供可用数据的单一表示。 我们可以使用内容协商,而不仅仅是在json或xml(或其他)之间进行选择,并提供客户要求的内容。 样本API 许多应用程序使用属于用户的项目集合的概念,因此在这里我们将使用喜欢的颜色的集合。 我们可以使用长颈鹿在F#中定义一个简单的my-colors端点: 这定义了一个Color类型,其中包含一些不同的属性,并通过GET请求使它们的集合可用。 它返回一个硬编码的值列表,但这只是一个示例,这样就可以了。 我们还可以创建一个简单的客户端,以从端点检索数据并将其显示给最终用户。 快速代码示例是使用URLSession和Decodable协议的iOS应用程序的一部分,使事情变得简单: 这种方法效果很好,但是我们已经可以看到API提供的数据与客户端实际需要的数据之间存在不匹配-API返回了一堆客户端不需要关心的字段。 对于此示例API来说,这不是什么大问题,但是如果列表中有很多条目或者我们的颜色对象更复杂,则可能会成为问题。 幸运的是,我们有一些方法可以使我们的API与客户需求相匹配。 一种新的媒体类型 我们不能仅仅从API响应中删除值,因为可能还有其他客户端依赖该数据,但是如果我们为客户端提供一种请求其他响应的方式,那么我们可以为每个客户端提供一个包含其数据的响应需要。 首先,我们需要配置Giraffe以支持自定义媒体类型。 为此,我们不需要任何自定义序列化,因此我们可以使用已经配置的json序列化器。 然后,我们可以创建颜色的自定义表示,并从端点向要求迷你版本的客户端返回它。 通过将我们的API配置为将迷你颜色响应返回给请求它的客户端,我们可以更新我们的应用程序客户端以发送新的Accept标头。 方便地,对于我们的快速客户端,设置额外的标头很简单: 现在,我们的客户请求一个特定的响应,而我们的API提供了响应,这非常好……目前。 但是,这的确会使我们的API和客户端耦合在一起-如果将来客户需要更改,那么即使已经可以提供该字段,我们的API也将需要更新,我们唯一的选择是全部或全部。 询问我们需要什么 我们希望找到一种方法,使我们的客户可以根据需要调整从API获取的数据, 而无需更改API 。 这意味着我们将需要某种方式让客户端描述其希望从API接收的数据。 现有几种描述API应该返回给客户端的数据形状的方法,尤其是GraphQL和JSON:API,因此值得考虑如何以不必将我们与任何特定事物联系在一起的方式来实现它如果以后要更改首选项,或者特别是在我们拥有具有不同需求的不同API客户端的情况下,请在将来实施。 内省的ReST建议使用MicroType作为构成媒体类型的一种方式。 使用该方法,我们现在可以添加一种过滤方法,然后在不破坏任何客户端的情况下,在以后添加对不同方法的支持。 因此,我们需要进行以下更改: 切换我们的API以使用可以支持过滤的媒体类型 我们将使用一种通用的api媒体类型: application / vnd.chamook.api + json ,它可以在与此API连接的所有api上使用。 我们不使用诸如application / json之类的东西,因为我们不能保证返回简单旧json的API将支持过滤(或我们想要添加的任何其他功能)。 定义我们的客户可以使用的过滤语法 我们可以使用前面提到的一种奇特的选择。 但是现在我们只需要一个非常简单的过滤器,因此自定义字段列表可能会更易于实现。 因为我们使用的是MicroType,所以如果以后确实需要,我们总是可以在以后添加对GraphQL之类的支持。 更新我们的客户端以使用新的过滤方法 完成此更新后,我们的客户端和API应该很好地分离,以便将来对过滤进行任何更改。 我们可能会增加API来描述客户端可用过滤选项的方式,但是如果我们不想使用该API的ReSTful方法,我们可以将其保留为文档中包含的内容-只要我们在API表面遵循通用约定,就不会有太大问题。 最终表格 做出决定后,我们可以使用以下代码更新API(使用最简单的过滤方法,通过指定响应中应包含哪些字段作为媒体类型的参数): 我们的客户只需要稍作更改即可使用新版本: 现在,我们的客户可以准确地指定所需的字段,并且我们的API将做出适当的响应。 仍然有一些可以改进的地方,但是到目前为止已经足够了。 […]

提手休息Api Menggunakan Alamofire di Swift 4

海,肯巴利·拉吉… Dalam beberapa bulan terakhir saya sempat disibukan dengan pekerjaan kantor,jadi belum dapat kesempatan untuk mengupdate artikel di medium🙁 Pada kesempatan kali ini saya阿肯色曼巴哈斯Tentang编程di IOS menggunakan bahasa pemrograman Swift (bosen android mulu:p)。 Oke,pada教程ina saya menggunakan IDE Xcode 10和Swift 4。 1.Buka XCode dan buat项目baru。 2.Tambahkan pod Alamofire dan SwiftyJSON Karena saya menggunakan 库外部 yaitu Alamofire和 SwiftyJSON […]