导入
从 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_at | title |
|---|---|---|
| 889 | 2013-03-16T22:03:13Z | MIX_PATH environment variable (of sorts) |
| 882 | 2013-03-20T19:22:07Z | Enhanced mix test --cover |
| 893 | 2013-03-21T06:23:00Z | mix test time reports |
| 898 | 2013-03-23T19:19:08Z | Add mix compile --warnings-as-errors |
我们的代码将如何实现?
程序将从命令行运行。我们需要传入 GitHub 用户名、项目名称以及一个可选的问题数量。这意味着我们需要进行基本的命令行参数解析。
- 我们需要以 HTTP 客户端的身份访问 GitHub,因此必须找到一个提供 HTTP 客户端功能的库。
- 返回的响应是 JSON 格式,因此还需要一个能够处理 JSON 的库。
- 我们需要能够对结果数据进行排序。
- 最后,我们需要将选定字段以表格形式呈现。
我们可以将这一数据处理过程看作一条生产线:原始数据从一端进入,经过每个环节的逐步转换,最终输出结果。
...
Data transformation process
如图所示,数据从命令行开始,最终变为表格。在每个阶段,数据都会经历一次转换(解析、获取、处理等)。这些转换正是我们编写的函数。接下来,我们将逐一介绍每个环节。