Logo
Section 1 / 13

从 GitHub 获取问题

理解 GitHub Issues 的概念,以及它们是如何被获取并传递到代码流程中的。

导入

从 GitHub 获取问题

理解 GitHub Issues 的概念,以及它们是如何被获取并传递到代码流程中的。

我们将需要组织源代码、编写测试并处理依赖项。同时,遵循 Elixir 的约定规范,这样我们才能获得工具的充分支持。

在本章中,我们将学习 Mix(代码中通常写作 mix),即 Elixir 的构建工具。我们将研究它所采用的目录结构,并了解如何管理外部依赖。最终,我们会使用 ExUnit 来为代码编写测试,并验证代码文档中的示例。为了说明这一点,我们将编写一个工具,用于下载并列出 GitHub 项目中最旧的 n 个问题。在此过程中,我们需要寻找一些库,并做出典型的 Elixir 项目设计决策。我们将把这个项目命名为 issues。

获取问题

GitHub 提供了一个便捷的 Web API 来获取问题。我们只需向 https://api.github.com/repos/user/project/issues 发送一个 GET 请求,即可获得一个包含问题的 JSON 列表。我们将对数据进行格式化、排序,并筛选出最旧的 n 个问题,最终以表格形式展示结果:

#created_attitle
8892013-03-16T22:03:13ZMIX_PATH environment variable (of sorts)
8822013-03-20T19:22:07ZEnhanced mix test --cover
8932013-03-21T06:23:00Zmix test time reports
8982013-03-23T19:19:08ZAdd mix compile --warnings-as-errors

我们的代码将如何实现?

程序将从命令行运行。我们需要传入 GitHub 用户名、项目名称以及一个可选的问题数量。这意味着我们需要进行基本的命令行参数解析。

  • 我们需要以 HTTP 客户端的身份访问 GitHub,因此必须找到一个提供 HTTP 客户端功能的库。
  • 返回的响应是 JSON 格式,因此还需要一个能够处理 JSON 的库。
  • 我们需要能够对结果数据进行排序。
  • 最后,我们需要将选定字段以表格形式呈现。

我们可以将这一数据处理过程看作一条生产线:原始数据从一端进入,经过每个环节的逐步转换,最终输出结果。

...
Data transformation process

如图所示,数据从命令行开始,最终变为表格。在每个阶段,数据都会经历一次转换(解析、获取、处理等)。这些转换正是我们编写的函数。接下来,我们将逐一介绍每个环节。

控制流

步骤 1:使用 Mix 创建我们的新项目