#measurement #api #ripe

ripeatlas

为Rust语言提供与RIPE Atlas API交互的库

2个不稳定版本

0.2.0 2022年12月21日
0.1.0 2022年12月5日

#measurement中排名第38

MIT许可

69KB
1K SLoC

Rust语言RIPE Atlas API [进行中]

此库提供RIPE Atlas测量的serde结构。

功能

  • chrono:当启用时,时间戳将直接从DateTime<Utc>(来自chrono包)反序列化,而不是整数时间戳。
  • strict:此功能在所有测量结构体上启用serde属性deny_unknown_fields。这旨在通过在作为输入提供之前未知的字段时产生错误来帮助解决文档不一致的问题。然而,这主要旨在用于与文档的一致性进行调试,并不推荐常规使用,因为它可能会在有效输入上产生错误。

测量结果上的文档不一致性

一个难以解决的问题就是官方文档并没有完全涵盖所有可能的响应。主要问题是探针测量代码全部是用C语言编写的,根本不知道JSON是什么。相反,当收集数据时,它会写入输出流。这对效率很有帮助,但也使得强制遵循特定模式以及确定所有可能的输出变得极其困难,除非分析探针代码。

我在这里收集了一列文档不一致的列表:https://gist.github.com/jmeggitt/08375285b40e3393da49a261b6b65b52

对于这个库,我的方法是首先根据官方文档中最新固件版本实现结构和反序列化,基于serde。为了测试这个库是否正确符合测量结果格式,我将其与实际的探针数据进行测试。这些测试中使用的数据是从RIPE Atlas提供的每小时数据转储中收集的。

目标和API支持

  • 测量结果类型
    • Ping
    • Traceroute
    • DNS查找
    • HTTP
    • NTP
    • TLS (SSL) GET证书
    • Wi-Fi

      注意:此测量类型在固件版本5000中被取消连接,除非我收到支持此类型测量的请求,否则不计划实现。

  • API支持
    • anchor-measrements
      • GET /api/v2/anchor-measurements/{pk}/
      • GET /api/v2/anchor-measurements/ [中等优先级]
    • 锚点
      • GET /api/v2/锚点/{pk}/
      • GET /api/v2/anchors/ [中等优先级]
    • 积分
      • GET /api/v2/credits/ [低优先级]
      • GET /api/v2/积分/收入-项目/
      • GET /api/v2/积分/支出-项目/
      • POST /api/v2/积分/转账/
      • GET /api/v2/积分/凭证/{代码}
      • POST /api/v2/积分/凭证/兑换/
      • GET /api/v2/积分/预约-订单/
      • POST /api/v2/积分/预约-订单/
      • GET /api/v2/积分/预约-订单/{pk}/
      • PATCH /api/v2/积分/预约-订单/{pk}/
      • DELETE /api/v2/积分/预约-订单/{pk}/
      • GET /api/v2/积分/账单-/
      • POST /api/v2/积分/账单-/
      • GET /api/v2/积分/账单-/{pk}/
      • PATCH /api/v2/积分/账单-/{pk}/
      • DELETE /api/v2/积分/账单-/{pk}/
      • GET /api/v2/积分/交易/
      • GET /api/v2/积分/成员/
      • POST /api/v2/积分/成员/索赔/
    • 密钥
      • GET /api/v2/密钥/权限/
      • GET /api/v2/密钥/权限/{权限}/目标/
      • GET /api/v2/密钥/{uuid}/
      • PUT /api/v2/密钥/{uuid}/
      • DELETE /api/v2/密钥/{uuid}/
      • GET /api/v2/密钥/
      • POST /api/v2/密钥/
    • 测量
      • GET /api/v2/measurements/ [高优先级]
      • POST /api/v2/measurements/ [中等优先级]
      • GET /api/v2/measurements/{pk}/ [中等优先级]
      • PATCH /api/v2/measurements/{pk}/
      • DELETE /api/v2/measurements/{pk}/
      • GET /api/v2/measurements/{pk}/results/ [高优先级]
      • GET /api/v2/measurements/{pk}/latest/ [高优先级]
      • GET /api/v2/measurements/my/ [中等优先级]
      • GET /api/v2/measurements/ping/
      • GET /api/v2/measurements/路由追踪/
      • GET /api/v2/measurements/ssl证书/
      • GET /api/v2/measurements/ntp/
      • GET /api/v2/measurements/wifi/
      • GET /api/v2/measurements/http/
      • GET /api/v2/measurements/dns/
      • GET /api/v2/measurements//
      • GET /api/v2/measurements//{pk}/
      • DELETE /api/v2/measurements//{pk}/
      • GET /api/v2/measurements/标签/
      • GET /api/v2/measurements/标签/{标签}/结果/
      • GET /api/v2/measurements/-标签/
      • GET /api/v2/measurements/-标签/{标签}/
      • POST /api/v2/measurements/-标签/{标签}/停止/
      • GET /api/v2/measurements/{pk}/标签/
      • POST /api/v2/measurements/{pk}/标签/
      • GET /api/v2/measurements/{pk}/标签/{标签}/
      • DELETE /api/v2/measurements/{pk}/标签/{标签}/
      • GET /api/v2/measurements/{msm_id}/参与-请求/
      • POST /api/v2/measurements/{msm_id}/参与-请求/
      • GET /api/v2/measurements/{msm_id}/参与-请求/{source_id}/
      • GET /api/v2/measurements/{pk}/私人/
    • 参与请求
      • GET /api/v2/participation-requests/{source_id}/ [中等优先级]
    • 探测
      • GET /api/v2/probes/ [高优先级]
      • GET /api/v2/probes/{pk}/ [中等优先级]
      • PUT /api/v2/probes/{pk}/ [中等优先级]
      • PATCH /api/v2/探测/{pk}/
      • GET /api/v2/probes/{prb_id}/measurements/ [中等优先级]
      • GET /api/v2/探测/存档/
      • GET /api/v2/探测/排名/
      • GET /api/v2/探测/标签/
      • GET /api/v2/探测/标签/{别名}/

依赖项

~2.1–4MB
~99K SLoC