Sentry API 使用笔记
扫描二维码
随时随地手机看文章
Sentry API 使用笔记
本文为使用Sentry API的笔记, 并非搭建Sentry的笔记
官方文档: https://docs.sentry.io/api/
官方社区: https://forum.sentry.io/
官方提醒:(2017年5月) The current version of the web API is known as v0 and is considered to be in a draft phase. While we don’t expect public endpoints to change greatly, keep in mind that the API is still under development.
身份验证
sentry API 的身份验证参数通过请求头传递,所有API都需要包含此请求头。
requests.get(api_url, headers=header)
如果没有提供此请求头参数会返回错误提示: {"detail": "Authentication credentials were not provided."}
。
headers
具体写法为:
{'Authorization': 'Bearer TOKEN'}
其中TOKEN在项目设置中的API -- Auth Tokens
里设置. 如果TOKEN错误会返回错误提示: {"detail": "Invalid token"}
API 列表
Sentry 的API分为几类, 具体每个API的含义可以直接看官方文档. 本文以Events
类别下的List a Project’s Events
举例说明如何使用这些API.
官方说明如下:
GET /api/0/projects/{organization_slug}/{project_slug}/events/ Return a list of events bound to a project. Note: This endpoint is experimental and may be removed without notice. Path Parameters: organization_slug (string) – the slug of the organization the groups belong to. project_slug (string) – the slug of the project the groups belong to. Method: GET Path: /api/0/projects/{organization_slug}/{project_slug}/events/
即:
请求方式:get
请求地址:你的sentry地址/api/0/projects/{organization_slug}/{project_slug}/events/
其中organization_slug
是组织名, project_slug
是项目名。
注意:
+ 并非所有请求都是get方式,比如删除相关API使用delete
,更新相关API使用put
。
+ 有些API还需要其他请求头, 比如更新issue的API还需要Content-Type: application/json
处理返回结果
此处以List a Project’s Events¶
API 为例。
如果参数都没问题的话API会以字符串形式返回100个(如果有的话,不足100个则直接返回全部) events
组成的列表, 每个event
都是json
格式的。
直接使用json
模块载入返回结果:
json.loads(response.text)
这样会得到一个列表, 每项均是一个dict
, 每个dict
包含了一个event
的信息。
如果这个项目的event
不止100条, sentry还会返回下一页的url。 没错, sentry把100条event
作为一页请求返回给接口调用, 要获得下一页events
的话需要从返回结果的响应头 response.headers
中获取下一页请求地址。
官方说明如下:
HTTP/1.0 200 OK Date: Sat, 14 Feb 2015 18:47:20 GMT Content-Type: application/json Content-Language: en Allow: GET, HEAD, OPTIONS Link:; rel="previous"; results="false",; rel="next"; results="true"
其中Link
中就包含了我们需要的下一页地址(示例中为https://sentry.io/api/0/projects/1/groups/?&cursor=1420837533:0:0`)
link = response.headers.get('Link')
接下来用正则或者其他什么方式从字符串里提取下一页地址再请求即可, 一直到无法提取到下一页地址或下一页地址返回结果为空。