产品经理视角 | API接口知识小结

news2024/11/17 4:33:55

应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口,内部接口又包括:上层服务与下层服务接口、同级接口。

本文站在产品经理角度由浅入深讲述接口相关知识,如果不想被视为技术大佬眼中什么都不懂的需求搬运工,清楚接口的相关知识是很有必要的。

常见web接口是http/https协议的接口,多用于外部系统或前端系统的调用,因为此类接口地址要暴露在外部,所以必须对接口的安全性做较高程度的校验。还要一种基于开源rpc构建的跨系统接口调用接口方案,此类主要用于大公司内网各系统间的互相调用,此类接口服务治理能力更强,接口相应速度更块。以下内容以http接口为例展开的讨论。

No.1

接口请求方式类型

常见的http请求方式包括:get(查)、post(增),除此之外还有put(改)、delete(删)等。接口所属类型是由业务决定的。比如你打开淘宝,展示的首页内容就需要用到get接口,获取页面信息,你看中了宝贝要下单,添加你的收获地址时,用的则是post接口。而这两种也是其中最常见的两种接口类型

1)get类型接口

格式:请求数参数写在网址后面,用”?”连接,多个参数之间用”&”连接。

场景:get型接口用于获取信息,多用于查询数据,如菜单列表展示,搜索展示,订单查询,优惠券查询等需要其他系统返回数据时使用。一般情况下请求的数据量较小,返回速度快,不过接口是暴露在外面的,所以会有一定的风险。

2)post型接口

说明:向指定资源位置提交数据(如提交表单、上传文件)来进行请求,post请求可能会导致新资源的建立。

场景:如注册、上传、发帖等功能,这种请求数据量大,安全性要求高。

其他接口类型如put(改)、delete(删)、patch等使用频率稍低一些,此处不再赘述。

No.2

接口响应机制类型

从返回上区分,分为同步接口、异步接口

1)同步交互

指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

比如登录接口,执行登录操作时,将用户名、密码、token等字段加密后通过接口校验,需要返回验证结果后,才能登录成功。

2)异步交互

指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。

如用户领导优惠券,只需要将用户的领券行为请求成功,资产系统收到请求后异步操作用户发券,通过异步的方法执行发券,调用方无须等待每个请求的调用结果。

区别:一个需要等待,一个不需要等待,在不影响用户体验的情况下,我们的项目开发中一般会优先选择不需要等待的异步交互方式。

哪些情况建议使用同步交互呢?比如用户登录、银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互。

No.3

接口的触发形式类型

1)分发接口

一个系统产生新数据的时候就分发给其它系统(也可以是多个)。

中台系统的核心思想是高内聚、低耦合,所以分发接口的使用场景还是比较多的。比如有一个主渠道系统来管理所有的渠道数据,而渠道数据是其他系统如商品系统、促销系统经常要使用到的信息。所以一旦出现新的渠道或者发生渠道变更,需要分发给其他所有对接了各个系统,实现对最新渠道的功能支撑。

2)订阅接口

一个系统在需要的时候调用其他系统的接口进行数据订阅。

比如订单系统生成订单时,因为很多外部系统可能需要及时获取订单状态信息。而订单系统也不知道要分发给哪些系统,这时候一般会将订单推送至特定的消息队列,比如KFK,其他由需要跟进订单状态的的系统订阅KFK消息后,可以即使获取订单完成信息,进行触发下一个动作。

No.4

其他API接口基本组成

在既定的业务下,接口请求类型、响应机制等确定后,再以​​淘宝详情API​​为例,了解下接口的其他组成内容。 

1)应用场景

顾名思义,此接口适用于的场景,明确接口的业务用途。

2)入参及出参

公共参数

名称

类型

必须

描述

key

String

调用key(必须以GET方式拼接在URL中)

secret

String

调用密钥

api_name

String

API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]

cache

String

[yes,no]默认yes,将调用缓存的数据,速度比较快

result_type

String

[json,jsonu,xml,serialize,var_export]返回数据格式,默认为json,jsonu输出的内容中文可以直接阅读

lang

String

[cn,en,ru]翻译语言,默认cn简体中文

version

String

API版本

请求参数

请求参数:num_iid=652874751412&is_promotion=1

参数说明:num_iid:淘宝商品ID
is_promotion:是否获取取促销价

响应参数

Version: Date:2022-04-04

名称

类型

必须

示例值

描述

item

item[]

1

宝贝详情数据

num_iid

Bigint

1

520813250866

宝贝ID

title

String

1

三刃木折叠刀过安检创意迷你钥匙扣钥匙刀军刀随身多功能小刀包邮

宝贝标题

desc_short

String

0

商品简介

promotion_price

Int

0

优惠价

price

Float

1

25.8

价格

total_price

Float

0

0

suggestive_price

Float

0

0

orginal_price

String

0

25.80

原价

nick

String

0

欢乐购客栈

掌柜昵称

num

Int

0

3836

库存(没有精确,是模糊值)

min_num

Int

0

0

最小购买数

detail_url

String

0

http://item.taobao.com/item.htm?id=520813250866

宝贝链接

pic_url

String

1

//gd2.alicdn.com/imgextra/i4/2596264565/TB2p30elFXXXXXQXpXXXXXXXXXX_!!2596264565.jpg

宝贝图片

brand

String

0

三刃木

品牌名称

brandId

Int

0

8879363

品牌ID

rootCatId

Int

0

50013886

顶级分类ID

cid

Int

1

50014822

crumbs

Mix

0

[]

导航菜单

created_time

String

0

modified_time

String

0

delist_time

String

0

desc

String

0

商品详情

desc_img

Mix

0

[]

商品详情图片

item_imgs

Mix

0

item_imgs[]

商品图片

item_weight

String

0

item_size

String

0

location

String

0

发货地

express_fee

Float

0

0.00

快递费用

ems_fee

Float

0

EMS费用

post_fee

Float

0

物流费用

shipping_to

String

0

发货至

has_discount

Boolean

0

false

是否有优惠

video

video[]

0

商品视频

is_virtual

String

0

is_promotion

Boolean

0

false

是否促销

props_name

String

0

1627207:1347647754:颜色分类:长方形带开瓶器+送工具刀卡+链子;1627207:1347647753:颜色分类:椭圆形带开瓶器+送工具刀卡+链子;

商品属性名。格式为pid1:vid1:name1:value1;pid1:vid2:name2:value2。

prop_imgs

prop_imgs[]

0

商品属性图片列表

property_alias

String

0

20509:9974422:36;1627207:28326:红色;20509:9975710:38;1627207:28326:红色;20509:9981357:40;1627207:28326:红色

销售属性值别名。格式为pid1:vid1:alias1;pid1:vid2:alia2。

props

Mix

0

[{ "name": "产地","value": "中国" }]

商品属性

total_sold

Int

0

skus

skus[]

0

商品规格信息列表

seller_id

Int

0

2844096782

卖家ID

sales

Int

0

138

销量

shop_id

Int

0

151372205

店铺ID

props_list

Mix

0

{20509:9974422: 尺码:36}

商品属性

seller_info

seller_info[]

1

卖家信息

tmall

Boolean

0

false

是否天猫

error

String

0

错误信息

warning

String

0

警告信息

url_log

Mix

0

[]

favcount

Int

0

0

fanscount

Int

0

0

method

String

0

item_tmall:pget_item

promo_type

String

0

props_img

Mix

0

1627207:28326": "//img.alicdn.com/imgextra/i2/2844096782/O1CN01VrjpXt1zyCc9DvERE_!!2844096782.jpg

属性图片

shop_item

Mix

0

[]

relate_items

Mix

0

[]

入参是接口请求所需要的变量参数,其中包括必填参数和非必填参数,非必填并非是可以忽略的,比如上面的入参中,签名类型为非必填,如果未传此参数,则默认此签名类型为MD5,如果使用的并非此类签名类型,则此项为必填项。如果是普通订单查询,入参时间非必填,则返回结果是用户全部订单,或者用户特定时间订单的区别。

3)错误码

接口请求并非每次都能成功,所以在接口开发时会对可能失败的情况进行错误码区分,在接口联调时可以根据返回的错误码快递定位问题。如果错误码不够全面,那在接口调用失败的时候,需要反复定位,降低开发效率。

No.5

接口安全性校验

接口完成业务逻辑开发后,接下来要考虑的就是安全性问题了,接口的安全性问题主要来源于几方面考虑:

1)请求来源是否合法?

即接口的伪装攻击,因为接口是对外的,在公网环境中,接口地址是暴露的,收到的请求有可能是恶意非法请求;如果真的是合法请求,也需要知道这个请求的来源,同时这个请求来源不能否认。这里引入“签名”的概念,以及签名的防伪装及抗否认性特性。

近些年各大企业强制使用https替换掉原有的http接口,正是因为https所使用的的证书安全性更高。

2)请求是否会被篡改,返回数据可能会被截取

因为接口是对外的,所以接收请求和返回数据的时候,是不可能使用明文方式传输的,否则一旦被恶意截取,会造成极大风险。所以请求数据及返回数据都是需要加密的,这样即使数据被截取,也不用泄露数据的内容。这里介绍几种现在常见的加密方法。

DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;

3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;

RSA:非对称加密,由 RSA公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;既可以实现加密,又可以实现签名。

如果是用户账号相关,现在会使用token加密用户信息,用户请求身份信息时,服务端会分配token存在缓存中,后续请求会将token与时间戳一起打包加密,这样即使请求数据被截获,因为不知道token的值,数据也不会被解析出来。

3)如何防范接口的重放攻击

就是把你的请求原封不动地多次发放,请求都会通过验证进入到正常逻辑中,会造成服务端接口拥堵并且会造成实际损失。

防重放一般需在请求参数加上 时间戳 + 随机数,通过时间戳确保接口是最新的请求,而随机数相同则可以认定为是重放攻击。

No.6

接口性能相关

如果是访问量比较大的接口,再上线前肯定需要进行压力测试。因为普通的开发自测和生产模拟是不能推算出高并发时候接口是否可正常运行。

1)TPS

Transaction Per Second 每秒系统处理的交易或事物的数量,衡量系统处理能力的重要指标。

2)RT

响应时间,从客户端发送一个请求开始,到客户端接收到从服务器返回的响应结果结束所经历的时间,包括请求发送时间,网络传输时间和服务器处理时间三部分。

3)吞吐量

指的是在一次性能测试过程中网络上传输的数据量的总和。

用户的响应时间自不必说,时间太久伤用户体验,及时处于高并发期,用户的响应时间依然需要控制到最低,一般不超过5s;

tps则是高并发的指标,一般提供服务的接口,需要考虑到最极端情况下的并发数,这些数量一般来自于运营的活动策划和往期的数据趋势预估,以此为依据,保证自己的接口可以支持最高的并发数,而验证这些使用的一般是压力测试。如正常情况下压测时tps可以达到2000时接口正常,就可以保证2000的实际并发。

No.7

接口需要做哪些测试

接口测试其实是白盒测试,首页要明确系统的能力输出,明确服务覆盖是否满足需求。以业务逻辑推接口参数。

1)入参不符合要求需要有明确错误码,报错信息和日志,方便问题复现与定位。

2)如果另有参数处理逻辑的链路,也需要一并验证,如购买网易云音乐会员,订单生成后会去权益系统加权,加权成功后会有短信通知用户,但加权接口和订单信息中都没有用户手机号,所以虽然入参中没有用户手机号,但需要根据用户的username去查询手机号,并执行短信发放的操作。

其他验证目标如:代码覆盖率是否达到要求、性能指标是否满足要求、安全指标是否满足要求则是更为专业性的测试指标了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1084136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

下一代Docker来了,会让部署更加丝滑吗?

下一代Docker来了,会让部署更加丝滑吗? 目录 一、Docker是什么? 二、Docker 的几个名词概念 2.1、镜像(Image) 2.2、容器 (Container) 2.3、仓库 (Repository) 三、容器和虚拟机比较 四、Docker 运行环境 五、…

因子分析(SPSS和Python)

一、源数据 二、SPSS因子分析 2.1.导入数据 2.2.标准化处理 由于指标的量纲不同(单位不一致),因此,需要对数据进行标准化处理 2.3.因子分析 点击“确定”后,再回到“总方差解释”表格,以“旋转载荷平方和…

Java 基于SpringBoot的某家乡美食系统

1 简介 《Java 基于SpringBoot的某家乡美食系统》该项目含有源码、文档等资料、配套开发软件、软件安装教程等。系统功能完整,适合作为毕业设计、课程设计、数据库大作业学习使用。 功能介绍 这个项目是基于 SpringBoot和 Vue 开发的地方美食系统,包括…

STM32F4X I2C LM75

STM32F4X I2C LM75 I2C协议讲解I2C接线I2C协议波形I2C起始信号I2C停止信号I2C应答信号I2C寻址I2C地址格式 I2C数据传输 LM75ALM75A介绍LM75A引脚说明LM75A地址LM75A寄存器LM75A I2C协议写配置寄存器读配置寄存器写Tos和Thyst寄存器读Tos Thyst Temp寄存器LM75A温度计算 LM75A例…

帆软报表之填报报表

1、配置数据源 URL填充格式:jdbc:mysql://127.0.0.1:3306/yq_iwater_ads 2、新建普通报表,配置数据库查询 3、编辑单元格 3.1、插入公式 ‘每月营业厅情况统计\n’ replace($month_id,‘-’,‘年’)‘月’ 3.2、插入数据列 3.3、关联数据列 3.4、隐藏不…

【java学习】面向对象特征之一:封装和隐藏(23)

文章目录 信息的封装和隐藏 信息的封装和隐藏 Java 中通过将数据声明为私有的 (private) 变量, 再提供 公共的( public )方法 :getXxx() 和 setXxx() 实现对该属性的操作,以实现下述目的: 隐藏一个类中不需…

LeetCode【100】单词拆分

题目&#xff1a; 代码&#xff1a; public boolean wordBreak(String s, List<String> wordDict) {Set<String> dictSet new HashSet<>(wordDict);boolean[] dp new boolean[s.length() 1]; // dp问题均是&#xff0c;先构造dp数组&#xff0c;大小为…

vue实现搜索文字高亮功能

在前端开发中&#xff0c;要实现文字搜索高亮效果&#xff0c;你可以使用JavaScript来搜索文本并通过CSS或其他方式对匹配的文本进行高亮处理。以下是一种常见的方法&#xff1a; 实现步骤&#xff1a; 1、 获取用户输入的搜索词。 2、创建一个正则表达式&#xff0c;以全局&am…

分享一下微信付费文章功能怎么做

微信付费文章功能是一种基于微信公众号的文章付费阅读模式&#xff0c;它可以帮助公众号运营者实现文章内容的变现&#xff0c;提高文章的阅读量和收益。本文将介绍微信付费文章功能的制作流程、功能特点、使用流程和推广策略&#xff0c;帮助读者了解如何制作一个高效的微信付…

嵌入式C语言自我修养《内存堆栈管理》学习笔记

目录 一、Linux环境下的内存管理 二、栈的管理 三、堆内存管理 四、mmap映射区 五、内存泄漏与防范 六、常见的内存错误及检测 C程序中定义的函数、全局变量、静态变量经过编译链接后&#xff0c;分别以section的形式存储在可执行文件的代码段、数据段和BSS段中。当程序运…

vue 本地上传Excel文件并读取内容

陌路遇见&#xff0c;陌路告别&#xff0c;陌路问好&#xff0c;九月再见&#xff0c;十月重现! 首先我来讲解一下我的思路&#xff1a; 首先&#xff0c;在模板部分&#xff0c;我们有以下元素&#xff1a; <input type“file” change“handleFileUpload” accept“.xlsx…

哈希应用之布隆过滤器

文章目录 1.介绍1.1百度搜索1.2知乎好文1.3自身理解 2.模拟实现2.1文档阅读2.2代码剖析 3.误判率的研究4.布隆过滤器的应用4.1如何找到两个分别有100亿个字符串的文件的交集[只有1G内存].分别给出精确算法和近似算法4.2如何扩展BloomFilter使得它支持删除元素的操作 5.整体代码…

第十章 字符串和日期

1.字符串 1.1.String 1.1.1.String特性 代表字符串。Java 程序中的所有字符串字面值&#xff08;如 "abc" &#xff09;都作为此类的实例实现&#xff1b;String是一个final类&#xff0c;代表不可变的字符序列,不可被继承&#xff1b;字符串是常量&#xff0c;用&…

高级网络调试技巧:使用Charles Proxy捕获和修改HTTP/HTTPS请求

今天我将与大家分享一种强大的网络调试技巧&#xff0c;那就是使用Charles Proxy来捕获和修改HTTP/HTTPS请求。如果您是一位开发人员或者网络调试爱好者&#xff0c;那么这个工具肯定对您有着很大的帮助。接下来&#xff0c;让我们一起来学习如何使用Charles Proxy进行高级网络…

1200*C1. k-LCM (easy version)(找规律)

Problem - 1497C1 - Codeforces 解析&#xff1a; 找规律即可&#xff0c;分为偶数的一半是偶数、偶数的一半是奇数、奇数三种情况 分别为 &#xff08;n/2&#xff0c;n/4&#xff0c;n/4&#xff09;&#xff08;n/2-1&#xff0c;n/2-1&#xff0c;2&#xff09;&#xff08…

canvas基础2 -- 形状

七巧板 七巧板本质上就是 分别由几个直线 拼成一个个图形&#xff0c;再将这些图形结合起来 var tangram [{ p: [{ x: 0, y: 0 }, { x: 800, y: 0 }, { x: 400, y: 400 }], color: "#caff67" },{ p: [{ x: 0, y: 0 }, { x: 400, y: 400 }, { x: 0, y: 800 }], col…

为什么3ds max渲染效果图有噪点?点进来,CG Magic告诉您!

大家在使用3ds max渲染效果图时&#xff0c;可能渲染结果往往会出现的都是不真实&#xff0c;有小伙伴会问如何使3dmax渲染效果图真实呢&#xff1f; 不真实就算了&#xff0c;渲染过程中&#xff0c;会出现3Dmax渲染噪点多这类问题。 什么原因3ds max渲染效果图有噪点呢&a…

满足新能源三电系统气密和电性能测试的E10系列多功能电连接器

在新能源汽车的测试领域中&#xff0c;三电系统的测试是质量管控过程中非常重要的组成部分。无论是防水防尘的气密性测试&#xff0c;还是EOL/DCR等电性能相关的测试&#xff0c;都是确保新能源汽车正常工作中不可缺少的一部分。 在以往的测试中&#xff0c;每种测试都是独立的…

海外问卷调查是不是很枯燥?

嘿&#xff0c;大家好&#xff01;我是橙河&#xff0c;这几年海外问卷调查这个项目很火热&#xff0c;这个项目看起来很高大上&#xff0c;实际上门槛并不高&#xff0c;甚至做的过程很枯燥。 海外问卷调查这个项目&#xff0c;被很多人称为“网络搬砖”&#xff0c;形容的也…

C++day05(运算符重载、静态成员、继承)

今日任务 1> 思维导图 2> 多继承代码实现沙发床 代码&#xff1a; #include <iostream>using namespace std; class Sofa { private:string sitting; public:Sofa() {}Sofa(string s):sitting(s){cout << "Sofa 有参" <<endl;}void show…