Object-Oriented GitHub API

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

GitHub 是一个非常棒的平台,用于维护 Git 源码并跟踪项目问题。大约三年前,我将所有的私有和公共项目都迁移到 GitHub,并且毫不后悔。此外,GitHub 通过 RESTful JSON API 提供了几乎所有的功能。

一些 Java SDK 封装和暴露了这个 API。我尝试使用它们,但是遇到了一些问题:

  • 它们不是基于JSR-353(JSON Java API)。

  • 他们没有提供任何模拟工具

  • 它们不涵盖整个 API 并且无法被扩展。

牢记所有这些缺点,我创建了自己的库-jcabi-github。让我们来看看它最重要的优点。

GitHub 服务器是一个对象。一个问题的集合是一个对象,一个单独的问题是一个对象,它的作者是一个作者,等等。例如,要获取作者的姓名,我们使用:

不用说,GitHubReposRepoIssuesIssueUser都是接口。实现它们的类在库中不可见。

MkGitHub class is a mock version of a GitHub server. It behaves almost exactly the same as a real server and is the perfect instrument for unit testing. For example, say that you’re testing a method that is supposed to post a new issue to GitHub and add a message into it. Here is how the unit test would look:

public class FooTest {
  @Test
  public void createsIssueAndPostsMessage() {
    GitHub github = new MkGitHub("jeff");
    github.repos().create(
      Json.createObjectBuilder().add("name", owner).build()
    );
    new Foo().doTheThing(github);
    MatcherAssert.assertThat(
      github.issues().get(1).comments().iterate(),
      Matchers.not(Matchers.emptyIterable())
    );
  }
}

这比通过Mockito或类似的框架进行传统的模拟更方便和紧凑。

它基于JSR-353并使用jcabi-http来处理HTTP请求。这种组合使得它具有高度的可定制性和可扩展性,当某些GitHub功能不被该库覆盖时(而且有很多这样的功能)。

例如,您想获取Userhireable属性的值。User.Smart类没有相应的方法。所以,这是您获取它的方法:

我们正在使用json()方法,该方法从JSR-353(Java7的一部分)返回一个JsonObject实例。

没有其他库允许直接访问GitHub服务器返回的JSON对象。

让我们看另一个例子。假设你想使用GitHub的某个未在API中涵盖的功能。你可以从GitHub接口获得一个Request对象,并直接访问服务器的HTTP入口点。

jcabi-http HTTP客户端被jcabi-github使用。

所有类都是真正的不可变的,并且带有@Immutable注解。这听起来可能是一个微小的好处,但对我来说非常重要。我在所有的项目中使用这个注解来确保我的类是真正的不可变的。

几天前我们发布了最新的版本0.8。这是一个重大更新,包含了超过1200个提交。它涵盖了整个GitHub API,并且应该非常稳定。该库作为一个JAR依赖项在Maven Central上发布(在Maven Central获取其最新版本)。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-28 at 15:32

sixnines availability badge   GitHub stars