首页 新闻 会员 周边

请教,如何做一个定制的webapi?

0
悬赏园豆:20 [已解决问题] 解决于 2019-12-18 11:08

要跟其他公司合作,为他们开放一个查询数据的接口,想用api来写,看了网上一些教程,都是些客户端方面的,登陆获取token等等。请问我这种直接跟别人对接的,还需要登录么,对方只是需要一个直接查询我某些数据的接口而已,一些验证该怎么弄合适呢,不想搞的太low,希望听听大家意见。以后接口还要开放给其他合作公司,提前谢谢大家。

一禅·小和尚的主页 一禅·小和尚 | 小虾三级 | 园豆:519
提问于:2019-12-12 10:46
< >
分享
最佳答案
0

现在比较常用的可能就是通过加密的方式来解决。给对方一个token 然后自己来程序中来验证token是否有效。
对于确保请求数据安全的话:在model中加一个sign 对方将请求数据md5 把md5的结果传过来。然后己方在接受到对方的数据后 将数据md5 对比两个md5是否一致。不一致则证明请求数据被篡改了

收获园豆:15
初夏的阳光丶 | 小虾三级 |园豆:641 | 2019-12-12 11:36

您的意思是他在请求我接口之前,先来获取一下token,然后每次请求都带上吗?这是一个后端操作,并不是针对客户端的接口。用客户端的设计方式,好使么。

他调用我接口,可能连续请求几百万次。

一禅·小和尚 | 园豆:519 (小虾三级) | 2019-12-12 15:00

@一禅·小和尚: 这个token 可以设定时效的呀。 请求一次 多久之后时效。这个完全没问题的

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-12-12 15:04

@初夏的阳光丶: 申请一次之后,有效期2分钟,然后每次请求数据都会重新更新他的有效期是么

一禅·小和尚 | 园豆:519 (小虾三级) | 2019-12-12 15:07

@一禅·小和尚: 不需要重新更新的。 token这个里面的信息是你自己定义的。 你隔一段时间检查一下token就好 (好比说把时间放进去 对比时间)

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-12-12 15:09

@初夏的阳光丶: 那有效2分钟的话,对方就要每两分钟,重新请求一次token了。

一禅·小和尚 | 园豆:519 (小虾三级) | 2019-12-12 15:13

@一禅·小和尚: 对的。这样相对来说安全一点

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-12-12 15:13

@初夏的阳光丶: 好的,多谢多谢,请问您是采用哪种加密解密的呢

一禅·小和尚 | 园豆:519 (小虾三级) | 2019-12-12 15:22

@一禅·小和尚: DES 因为需要一个key 可以用来区分一些信息

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-12-12 15:24

@初夏的阳光丶: 你好,请问时间戳这个参数,是服务器返回给用户的吗?用户再次请求时,只需要原封不动的带上就OK吧

一禅·小和尚 | 园豆:519 (小虾三级) | 2019-12-13 11:21

@一禅·小和尚: 是的

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-12-13 11:22
其他回答(4)
1

按照我的思路是这样认为的:
1、根据令牌(指定公司名称或其他)申请密钥(Token),服务器判断是否满足条件下发密钥(Token),同时服务器记录密钥(Token)有效期(时间戳);
2、查询数据:根据指定密钥(Token)+有效期(时间戳)+请求接口查询数据。

如果后续需要开发给其他公司,只需在谈合作的时候用户提供一个身份令牌即可(可以是公司名称或者其他,PS:身份令牌需要存库,用于判断是否为合作公司)

收获园豆:4
熊泽-学习中的苦与乐 | 园豆:2267 (老鸟四级) | 2019-12-12 11:43

我就是这样做的,令牌/票据(bill)+申请密钥(Token)+时间戳进行的,感觉蛮好的

支持(0) 反对(0) 重生时空之门 | 园豆:104 (初学一级) | 2019-12-12 14:55

请问申请秘钥这一步,怎么完成呢?对方在每次请求数据之前,先获取一下秘钥吗,然后我为秘钥设置个有效期吗?

假如有效期1小时,而对方循环获取数据,超出一小时怎么办,我并不知道他会获取多久,我有一亿数据。。

支持(0) 反对(0) 一禅·小和尚 | 园豆:519 (小虾三级) | 2019-12-12 14:57

@一禅·小和尚: 提示用户啊,密钥有效期1小时,在1小时有效期内重复申请无效啊,或者一小时只能申请2-3次,超过一小时密钥失效,失效后重新申请就行了。
如果你又几亿数据,你首先判断查询一次需要多长时间,根据这个时间设置有效期,很过平台的密钥有效期都是7天。这个可以参照一下。

支持(0) 反对(0) 熊泽-学习中的苦与乐 | 园豆:2267 (老鸟四级) | 2019-12-12 15:31

@一禅·小和尚: 然后每天一个客户你定义可以申请几次,超过你定义的次数就定义为恶意申请,然后返回状态提示【您今日密钥申请次数已到达上限】之类的不久好了

支持(0) 反对(0) 熊泽-学习中的苦与乐 | 园豆:2267 (老鸟四级) | 2019-12-12 15:33
0

可以参考大厂 微信公众号开放平台、微信支付、支付宝支付怎么做

通信的搞程序 | 园豆:1747 (小虾三级) | 2019-12-12 16:41
0

看重要性,如果是很关键的数据,又是外网,考虑要验证。
如果本来就是查询公开数据,不用也无防。

gw2010 | 园豆:1487 (小虾三级) | 2019-12-13 11:23

数据很重要,而且是外网。我是定向给某个公司开放这个接口。

支持(0) 反对(0) 一禅·小和尚 | 园豆:519 (小虾三级) | 2019-12-13 11:56
0

-H "Client-Id: {your Client ID}" -H "Authorization: Bearer {your Token}"
系统建一个表, 放着客人编号,客人查询的token码, 接口添加这二个参数验证, 如果正确的就返回相应的json给他们

收获园豆:1
风浪 | 园豆:2996 (老鸟四级) | 2019-12-13 17:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册