所谓的接口感觉就是一个action?
比如一个web系统,如果也想开放一些接口给别人用,那么是不是直接就写一些action给别人通过http得到返回值就好了?
还有接口验证的问题,不应该知道URL就能用了对吧?看别人的API都会去验证一些token和appliy_key这些东西。
自己web网页也去用这些接口不就会比较麻烦?
java中通常做这些api接口的方式有哪些。
这个给两个用过的例子吧,具体是啥真心感觉token挺复杂。
1. 权限控制时候判定请求内容是否超时,用在视频上。发送请求时候带了一个token参数,这个token是由time,name等等外加自己一个字符串my,
用md5加密,服务器取到后先逆向解密,key就是那个my吧。之后用time,name等先去做权限鉴定,看是否能取到内容。
2. 就不是很具体了,用七牛或者微信做程序时候都用到一个根据他们给的api生成的token,请求需要带着这个token。
也想知道这些token怎么工作的,是不是和1里边说的一样呢?
我们一般是使用MD5进行加密的
首先强行跑个题,接口是指约定好的可编程API,并不一定要限定于是RESTful API,更不用限定于用action实现
用action是实现RESTful API的一种方式
当然我知道按照你的描述应该是想说RESTful API,也就是通过GET POST PUT等等HTTP方法来请求操作资源的API,比如我设计了一个接口,按参数填写发送GET请求就能获取你想要的数据,然后根据不同的语言来实现不同的客户端,这就是一个RESTful API
至于token鉴权之类的,这取决于你的API操作是否允许第三方随便调用
举个例子,酷狗音乐的音乐搜索功能,包括搜索出来的音乐下载地址,音频详细数据之类的,这些数据是酷狗给自家客户端使用的,并不是给第三方用户抓取酷狗音乐库数据的,在设计出来的时候可能并不希望公开调用,但是如果不做校验又容易被人用抓包等手段获取到API地址并且调用
那么这个时候,API就需要鉴权,比较常见的一种方式就是把参数+时间戳+私钥一起计算md5,然后把md5和参数+时间戳一起传输给后台,后台拿到参数后对参数+时间戳+服务器内部存储的私钥一起计算md5,判断和接口传递过去的md5是否相等,就可以知道这个请求是客户端正常发起的,还是第三方拦截的。如果第三方拦截并且重发,会因为时间戳相同而被拒绝访问。如果第三方要修改时间戳或者内容,因为不知道私钥(私钥没有发送,只是在客户端计算md5的时候用了下),md5比对不上,依然会被拒绝提供服务
相反,如果你设计的接口只是在页面上使用,并没有加密的必要,那么也没必要搞这些东西,比如bilibili的排行榜数据,就是可以随便访问的json接口,并不需要传递任何参数,事实上做了也没有什么意义
至于Java通常做api接口有哪些方式...恩,你在用什么框架就直接用那个框架做就行...RESTful API本质上只是遵循HTTP协议的网页接口而已,所以任何可以实现HTTP服务器的方式都可以用来做接口