「认证」听起来很陌生,但在日常生活里,它就是我们每天都在做的「登录」。在互联网上、电脑上,有一些信息是属于你个人的,理论上应该除了你自己谁也不能让他知道。所以我们需要用账户密码,去告诉服务或者系统,现在登录的这个人是「我」,请放行。
所以和 API 有关的那些捷径里,稍微复杂一点的,其实都需要我们「登录」。只不过在捷径里,这个登录的方式和我们平常登录的方式不大一样。在文档里,它的叫法也还原为了更基本的「认证(Authentication)」。
很多 API 文档都会把「认证(Authentication)」作为单独的一个部分,甚至放到最开始。这是因为大多数服务,如果不认证,那能做的事可以说微乎其微。
第一种 Toggl 认证的方法
Toggl 的 API 也是如此,在给出简单的提交示例和返回示例之后,往下一滑,就能看到「Authentication」,并在最后给出了详细介绍「Authentication」方法与示例的链接,我们直接看这里即可:
这张图,也就是文档最开始的部分已经明确给出了我们需要的所有信息。它有两种方法,一种是通过用户名和密码,另一种是通过 Token。我们先来看第一种,即用户名密码这一种,我们要遵循哪些规则:
- 需要用户名和密码,而且要写成
用户名:密码
的形式,中间是个半角冒号。 - 把
用户名:密码
用 Base64 编码。 - 最后在提交请求时,Header(头部)要填写的格式是:
Authorization: Basic 编码内容
。
它还举了个例子,如果你的账户是「Aladdin」,密码是「open sesame」,最后 Header 要填写的东西就是 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
。
在捷径中完成 Toggl 认证
接下来我们就来看如何通过捷径来实现 Toggl 认证。
首先我们建立一个「文本」操作,把自己的账户、密码用它要求的这种格式 用户名:密码
填进去:
接下来,我们按照文档要求,用「Base64 编码」这个操作将其进行编码,再设一个变量:
这个时候,按顺序,我们要编辑 Header 的部分了。但是我们要知道,Header 是发起请求的时候填的,而发起请求需要一个目标 URL,换句话说我们要对一个 URL 来发起请求(回想一下上一周的内容)。所以我们现在,还要先想一下,我们要针对 Toggl 发起什么请求。
我们这个捷径,最后是要根据 Toggl 当时有没有在运行计时器,来判断下一步的行动的,也就是检查 Toggl 计时器(Timer)当时(Current)的运行状态。所以我们可以先在文档里找找,有没有请求是干这个的。
在 Time Entries 的部分文档里,我们找到了符合要求的请求链接:https://www.toggl.com/api/v8/time_entries/current
。一看这个链接就能看出来,它是检查当前计时器的运行情况的:
那么我们就拿它来做测试看看:
我们把它放到「URL」这个操作里,在「URL」之下接上「获取 URL 内容」,方法选择文档指定的「GET」。最最重要的是,我们要在头部,按照前文写过的格式,来完成认证。
接着我们就可以运行一下来检查结果了。运行之后大家会看到的结果很可能是这样:
这是因为当前 Toggl 里没有运行任何计时器。如果 Toggl 里有正在运行的计时器的话,它显示的结果应该是这样:
这里面包括了当前计时器的所有信息,有:计时器名、所属项目的 ID、起始时间、已运行时间等。
通过这两种结果的区别,我们就可以用条件判断,来让捷径根据有无计时器运行,做到启动计时器或停止计时器。
第二种 Toggl 认证的方法
第二种 Toggl 认证的方法是通过个人的 Token,这个 Token 我们可以在自己的 Toggl Profile 页找到:
在这个页面的底部,有个「API Token」,里面就有你的个人 Token。
通过 Token 验证的方式和用户名密码的验证方式基本一样,我们只要把 用户名:密码
改为 你的个人 Token:api_token
即可。比如我的个人 Token 是「0aff23fbfb42eee60b8e12e22c343ce0」,那么按照格式就应该是0aff23fbfb42eee60b8e12e22c343ce0:api_token
。
随后的编码步骤和填入 Header 的格式都是完全一样的,我直接展示一下捷径中的操作列表,各位应该就能明白:
小结
互联网服务用于认证的方式各式各样,但在捷径里能用的认证方式非常有限,这主要是因为用户能通过捷径发送请求的方式非常有限,基本只能靠文本,而 Toggl 用于认证的两种方式正好都是通过文本转编码的方式,这也让它成为最合适的示例。
各位在使用捷径调用其它服务时,首先就是要看这个服务是不是支持这种靠文本能解决的认证方式。如果 API 文档中没有给出任何像 Toggl 这样完全靠文本就能解决的认证方式,那就不必再耗费时间折腾下去了。