司开星的博客

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.

官方说明如下:

1
2
3
4
5
6
7
8
9
10
11
12
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个events 组成的列表, 每个event 都是json 格式的。

直接使用json模块载入返回结果:

json.loads(response.text)

这样会得到一个列表, 每项均是一个dict, 每个dict包含了一个event的信息。

如果这个项目的event不止100条, sentry还会返回下一页的url, 要获得下一页events的话需要从返回结果的响应头 response.headers 中获取下一页请求地址。

官方说明如下:

1
2
3
4
5
6
7
8
9
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: <https://sentry.io/api/0/projects/1/groups/?&cursor=1420837590:0:1>;
rel="previous"; results="false",
<https://sentry.io/api/0/projects/1/groups/?&cursor=1420837533:0:0>;
rel="next"; results="true"

其中Link中就包含了我们需要的下一页地址(示例中为https://sentry.io/api/0/projects/1/groups/?&cursor=1420837533:0:0`)

link = response.headers.get('Link')

接下来用正则或者其他什么方式从字符串里提取下一页地址再请求即可, 一直到无法提取到下一页地址或下一页地址返回结果为空。

注意事项

  • sentry web端使用的接口与sentry 提供的API不相同,比如web端使用的接口eventID直接使用相应数字即可,但API中需要使用一长串字符;
  • 官方文档目前仍不完善,使用时要多加尝试。