api接口

DRF之简介以及序列化操作

空扰寡人 提交于 2020-02-13 06:08:00
1. Web应用模式. 在开发Web应用中,有两种应用模式: 前后端不分离 2.前后端分离 2. api接口 为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。 目前市面上大部分公司开发人员使用的接口服务架构主要有:restful、rpc。 rpc: 翻译成中文:远程过程调用[远程服务调用]. http://www.lufei.com/api post请求 action=get_all_student&params=301&sex=1 接口多了,对应函数名和参数就多了,前端在请求api接口时,就会比较难找.容易出现重复的接口 restful: 翻译成中文: 资源状态转换. 把后端所有的数据/文件都看成资源.那么接口请求数据,本质上来说就是对资源的操作了. web项目中操作资源,无非就是增删查改.所以要求在地址栏中声明要操作的资源是什么,然后通过http请求动词来说明对资源进行哪一种操作.   POST http://www.lufei.com/api/students/ 添加数据   GET http://www.lufei.com/api/students/ 获取所有学生 3. RESTful API规范 REST全称是Representational State

物流跟踪API-快递单订阅

风格不统一 提交于 2020-02-11 23:41:36
上一篇文章我们讲解了轨迹查询的接口,通过快递鸟接口可以实现实时查询物流轨迹,这次给大家推荐订阅服务功能。 为了更好的理解订阅服务,我们来做个对比, 即时查询是主动查询物流轨迹,需要我们主动调用接口才能获得物流轨迹。 快递单订阅是被动接收物流轨迹,我们把大量的物流订单通过接口委托给快递鸟, 快递鸟对订单进行实时监控,当物流轨迹有更新时,快递鸟通过内部处理,计算运单预计到达时间、全流程的物流状态,推送到我们指定的接口地址。每一次的物流轨迹更新,快递鸟就会调用一次我们提供的接口地址,直到订单签收后才结束订阅。 有些朋友可能会问,我只要使用即时接口查询快递就可以了,为什么还要使用订阅服务功能? 目的只有一个,减少公司开发成本,提升用户体验。 假设我们的电商平台,每天有1000个订单需要发货,每天就有1000个运单要查询物流轨迹,一个订单从发货到签收周期是3-7天,我们需要查询所有未签收的运单轨迹,综合统计,一天我们可能需要查询5000千个订单,如果我们对订单时效要求非常高,需要实时了解包裹的签收情况,我们就要反复调用接口,每半小时调用一次,一个单一天要调用48次,如果时效要求更高,调用更频繁,5000个订单需要调用24万次以上,这样的频繁调用既占用公司服务器资源,也容易被快递鸟当中恶意攻击查封接口。 这个时候订阅服务的优势就提现出来了,我们只需要把每天的1000个发货订单推送到快递鸟

UC接口文档

微笑、不失礼 提交于 2020-02-09 14:11:15
UC 接口文档 一、 功能描述 提供同步登录、退出、注册等相关接口,可以实现用户一个账号,在一处登录,全站通行。 二、 测试环境UC 地址 http://s1.p5w.net/uc/ 三、 相关接口 UC_API=http://s1.p5w.net/uc/ UC_IP = UC_KEY = 123456 UC_APPID = 15 UC_CONNECT = 1. 注册 integer uc_user_register(string username , string password , string email) 参数说明 username 用户名 password 密码 email 电子邮件地址 返回值 值 integer 大于 0: 返回用户 ID,表示用户注册成功 -1: 用户名不合法 -2: 包含不允许注册的词语 -3: 用户名已经存在 -4: Email 格式有误 -5: Email 不允许注册 -6: 该 Email 已经被注册 2. 用户登录 array uc_user_login(string username , string password [, bool isuid]) 参数 说明 username 用户名 password 密码 isuid 是否使用用户 ID登录 1:使用用户 ID登录 0:(默认值) 使用用户名登录 返回值 值 String 大于 0

yamlapi接口测试框架

一曲冷凌霜 提交于 2020-02-09 05:36:46
1、思路: yamlapi支持unittest与pytest两种运行模式, yamlapi即为yaml文件+api测试的缩写, 可以看作是一个脚手架工具, 可以快速生成项目的各个目录与文件, 测试人员只需维护一份或者多份yaml文件即可, 不需要大量写代码。 2、安装: https://pypi.org/ 可在首页搜索“yamlapi”, 或者直接访问项目主页: https://pypi.org/project/yamlapi/ pip install yamlapi # 安装 yamlapi -h(或yamlapi --help) # 查看参数信息 yamlapi -v(或yamlapi --v) # 查看版本号 pip install -U yamlapi # 安装最新版 yamlapi --p=项目名称 # 创建项目 # 例如在某个路径下执行命令:yamlapi --p=demo_project pip uninstall yamlapi # 卸载 3、工程示例: README.md文件: # honeybee (蜜蜂)接口测试框架 # 一、思路 1、采用requests+unittest+ddt+PyMySQL+BeautifulReport+demjson+loguru+PyYAML+pytest+pytest-html+allure-pytest+pytest

迅雷API接口

心已入冬 提交于 2020-02-08 03:29:34
迅雷API接口 附:其中用到了AddTask这个方法,这个方法的参数如下:AddTask("下载地址", "另存文件名", "保存目录","任务注释","引用地址","开始模式", "只从原始地址下载","从原始地址下载线程数") 。 参数名含义 pURL目标URL,必须参数 pFileName另存名称,默认为空,表示由迅雷处理,可选参数 pPath存储目录,默认为空,表示由迅雷处理,可选参数 pComments下载注释,默认为空,可选参数 pReferURL引用页URL,默认为空,可选参数 nStartMode开始模式,0手工开始,1立即开始,默认为-1,表示由迅雷处理,可选参数 nOnlyFromOrigin是否只从原始URL下载,1只从原始URL下载,0多资源下载,默认为0,可选参数 nOriginThreadCount原始地址下载线程数,范围1-10,默认为-1,表示由迅雷处理,可选参数 Public Function 迅雷下载(网址 As String, Optional 保存路径 As String, Optional 另存为文件名 As String, Optional 下载注释 As String, Optional 引用页 As String, Optional 开始模式 As Long = 1, Optional 否只从原始网址下载 As Boolean =

高德地图API使用

末鹿安然 提交于 2020-02-07 12:16:30
高德地图二次开发提供了很多接口,功能强大。 首先需要申请一个KEY教程如下: 链接 通过这个key替换 <script src="https://webapi.amap.com/maps?v=1.4.15&key=自己的KEY&plugin=AMap.Autocomplete"></script> 其中plugin=AMap.Autocomplete为需要加载的组件类型,例如还有plugin=AMap.Driving等 实现功能如下功能: 可以在轨迹上查点,然后通过查询API导航轨迹: 代码实现如下: <!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"> <title>轨迹编辑</title> <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" /> <script type="text

基于百度AI文字识别系列

牧云@^-^@ 提交于 2020-02-07 10:19:11
About 百度AI平台有丰富的接口供我们调用,包括人脸识别、文字识别、语音识别等,非常的方便。 想要使用该平台,首先要有一个百度账号,然后进入 百度IA开放平台 ,创建相应的应用: 进入文字识别,这时可能会提示你登录,登录完事后,进入自己的控制台,选择文字识别,然后创建应用,应用名和描述视情况填写。然后记住下图中的相关参数,后续会用到。 通用文字识别 首先要下载包: pip install baidu-aip 图片: 代码: from aip import AipOcr def initial(): """ 初始化连接 """ APP_ID = '你的 App ID' API_KEY = '你的 Api Key' SECRET_KEY = '你的 Secret Key' return AipOcr(APP_ID, API_KEY, SECRET_KEY) def get_file_content(filePath): """ 读取图片 """ with open(filePath, 'rb') as f: return f.read() if __name__ == '__main__': client = initial() image = get_file_content('img3.png') res1 = client.basicGeneral(image) #

API接口通讯参数规范

痞子三分冷 提交于 2020-02-05 05:34:40
  问题引出     通常在很多的公司里面,对于接口的返回值没做太大规范,所以会比较常看到各个项目各自定义随意的返回值,比如以下情况:   1. 直接返回bool值(True或者False)   2. 返回void,只要不是异常信息,默认成功   3. 直接返回异常详情(这个非常不好,通过一些低级的异常,客户可以看到公司的一个技术水平)   4. 返回多个值,还要使用 out 来添加返回参数   5. 。。。   对于项目数量稍微多点的公司来说,接手多个项目的同事估计要吐血,所以项目间的业务通信规范是很有必要的。   解决方案   结合个人项目经验,定义一个专门用来封装返回值信息的通用类,如下:    /// <summary> /// 返回结果 /// </summary> public interface IResult { /// <summary> /// 结果状态码 /// </summary> ResultCode Code { get; set; } /// <summary> /// 提示信息 /// </summary> /// <example>操作成功</example> string Message { get; set; } /// <summary> /// 是否成功 /// </summary> bool Success { get; } } ///

常见的API接口管理工具

跟風遠走 提交于 2020-02-04 04:47:51
1、Postman Postman是被大家所熟知的网页调试Chrome插件,我们常常用它来进行临时的http请求调试。幸运的是,Postman可以将调试过的请求保存到Collection中。形成的Collection就可以作为一份简单有效且支持在线测试的接口文档,使用同一账号登录就可以做到分享和同步。对QA来说,使用Postman进行接口测试和接口文档维护是同一件事情,测试即文档,维护成本也很低。官网:https://www.getpostman.com 2、Swagger “Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。”简单来说,Swagger是一个功能强大的接口管理工具,并且提供了多种编程语言的前后端分离解决方案。Swagger主要包含了以下4个部分: 1. Swagger可以直接嵌入项目中,通过开发时编写注释,自动生成接口文档; 2. Swagger包含了Swagger Editor,它是使用yaml语言的Swagger API的编辑器,支持导出yaml和json格式的接口文件; 3. Swagger包含了Swagger UI,它将Swagger Editor编辑好的接口文档以html的形式展示出来; 4. Swagger支持根据定义的接口导出各种语言的服务端或客户端代码。 官网:https://swagger.io/ 3

Java Flow API 的实践(二):Publisher的简单封装

六眼飞鱼酱① 提交于 2020-01-31 00:11:41
Java Flow API 的实践(二):Publisher的简单封装 概述 从前一篇文章中可以看到,使用 Publisher 的其中一种方式就是直接写一个类实现 Publisher 接口,在该类中实现对应的业务逻辑。不过按照这种方式实现,对于一些临时性的功能会产生大量一次性的类。一种解决方式就是像RxJava的创建操作符那样,将实际操作过程抽象出去。本文就按照后一种方式来封装。 实现效果如下: Flow . Publisher < Integer > publisher ; /* 1.从数组创建 */ publisher = Flows . fromArray ( new Integer [ ] { 1 , 2 , 3 , 4 } ) ; /* 2.从可迭代集合创建 */ publisher = Flows . fromIterable ( Arrays . asList ( 1 , 2 , 3 ) ) ; /* 3.从Callable创建 */ publisher = Flows . fromCallable ( ( ) - > 1 ) ; /* 4.从可变参数创建 */ publisher = Flows . from ( 1 , 2 , 3 ) ; /* 5.通过Emitter实现 */ publisher = Flows . create ( emitter - > {