Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gitlab4j/gitlab4j-api

GitLab4J API (gitlab4j-api) provides a full featured Java client library for working with GitLab repositories via the GitLab REST API
https://github.com/gitlab4j/gitlab4j-api

gitlab gitlab-api gitlab4j-api hacktoberfest java java-gitlab-api

Last synced: about 14 hours ago
JSON representation

GitLab4J API (gitlab4j-api) provides a full featured Java client library for working with GitLab repositories via the GitLab REST API

Awesome Lists containing this project

README

        

# GitLab4J™ API (gitlab4j-api)
Java Client Library for the GitLab REST API

[![Maven Central](https://img.shields.io/maven-central/v/org.gitlab4j/gitlab4j-api.svg)](http://mvnrepository.com/artifact/org.gitlab4j/gitlab4j-api)
[![Build Status](https://github.com/gitlab4j/gitlab4j-api/actions/workflows/ci-build.yml/badge.svg?branch=main)](https://github.com/gitlab4j/gitlab4j-api/actions/workflows/ci-build.yml)
[![javadoc.io](https://javadoc.io/badge2/org.gitlab4j/gitlab4j-api/javadoc.io.svg)](https://javadoc.io/doc/org.gitlab4j/gitlab4j-api)

GitLab4J™ API (gitlab4j-api) provides a full featured and easy to consume Java library for working with GitLab repositories via the GitLab REST API. Additionally, full support for working with GitLab webhooks and system hooks is also provided.

---
## Table of Contents
* [GitLab Server Version Support](#gitLab-server-version-support)

* [Using GitLab4J-API](#using-gitlab4j-api)

* [Java 8 Requirement](#java-8-requirement)

* [Javadocs](#javadocs)

* [Project Set Up](#project-set-up)

* [Usage Examples](#usage-examples)

* [Setting Request Timeouts](#setting-request-timeouts)

* [Connecting Through a Proxy Server](#connecting-through-a-proxy-server)

* [GitLab API V3 and V4 Support](#gitLab-api-v3-and-v4-support)

* [Logging of API Requests and Responses](#logging-of-api-requests-and-responses)

* [Results Paging](#results-paging)

* [Java 8 Stream Support](#java-8-stream-support)

* [Eager evaluation example usage](#eager-evaluation-example-usage)

* [Lazy evaluation example usage](#lazy%20evaluation-example-usage)

* [Java 8 Optional<T> Support](#java-8-optional-support)

* [Issue Time Estimates](#issue-time-estimates)

* [Making API Calls](#making-api-calls)

* [Available Sub APIs](#available-sub-apis)

---

> **Warning**
> If you are looking for our next major version `6.x.x` which is requiring **Java 11** as mimimal version and which is using Jakarta EE components using the `jakarta.*` packages instead of `javax.*` check the [`6.x` branch](https://github.com/gitlab4j/gitlab4j-api/tree/6.x).
> The `6.x.x` version is the one you need if you are using Spring Boot 3 and Spring Framework 6.0, .

## GitLab Server Version Support

GitLab4J-API supports version 11.0+ of GitLab Community Edition [(gitlab-ce)](https://gitlab.com/gitlab-org/gitlab-ce/) and GitLab Enterprise Edition [(gitlab-ee)](https://gitlab.com/gitlab-org/gitlab-ee/).

GitLab released GitLab Version 11.0 in June of 2018 which included many major changes to GitLab. If you are using GitLab server earlier than version 11.0, it is highly recommended that you either update your GitLab install or use a version of this library that was released around the same time as the version of GitLab you are using.

**NOTICE**:
As of GitLab 11.0 support for the GitLab API v3 has been removed from the GitLab server (see https://about.gitlab.com/2018/06/01/api-v3-removal-impending/). Support for GitLab API v3 will be removed from this library sometime in 2019. If you are utilizing the v3 support, please update your code to use GitLab API v4.

---
## Using GitLab4J-API

### **Java 8 Requirement**
As of GitLab4J-API 4.8.0, Java 8+ is now required to use GitLab4J-API.

### **Javadocs**
Javadocs are available here: [![javadoc.io](https://javadoc.io/badge2/org.gitlab4j/gitlab4j-api/javadoc.io.svg)](https://javadoc.io/doc/org.gitlab4j/gitlab4j-api)

### **Project Set Up**
To utilize GitLab4J™ API in your Java project, simply add the following dependency to your project's build file:

**Gradle: build.gradle**
```java
dependencies {
...
compile group: 'org.gitlab4j', name: 'gitlab4j-api', version: '5.6.0'
}
```

**NOTE:** Pulling dependencies may fail when using Gradle prior to 4.5. See [Gradle issue 3065](https://github.com/gradle/gradle/issues/3065#issuecomment-364092456)

**Maven: pom.xml**
```xml

org.gitlab4j
gitlab4j-api
5.6.0

```

**Jbang:**

[Jbang](https://www.jbang.dev/) is very convinient to run scripts writen in Java having dependencies on third party libraries.

Just add this line at the top of your script:

```java
//DEPS org.gitlab4j:gitlab4j-api:5.6.0
```

**Ivy and SBT**

There have been reports of problems resolving some dependencies when using Ivy or SBT, for help resolving those issues see:

JAX-RS API Issue #571

JAX-RS API Issue #572

### **Lastest version**

While we are frequently creating releases, you might be interested by a feature that has not been published yet.
You can use jars created by [jitpack](https://jitpack.io/) to get the newest version.

**Usage with gradle:**

```gradle
repositories {
mavenCentral()
maven {
url "https://jitpack.io"
content {
includeGroup "com.github.gitlab4j"
}
}
}

dependencies {
// ...
implementation 'com.github.gitlab4j:gitlab4j-api:main-SNAPSHOT'
// ...
}
```

**Usage with maven:**

```xml


jitpack.io
https://jitpack.io


com.github.gitlab4j
gitlab4j-api
main-SNAPSHOT

```

**Usage with jbang:**

You just need to declare the dependency like this, instead of using the maven coordinates:

```java
//DEPS https://github.com/gitlab4j/gitlab4j-api/tree/main#:SNAPSHOT
```

**Using a specific commit**

Version `main-SNAPSHOT` indicates that you would like to get the latest of the `main` branch.
You can also point to a specific commit:

```gradle
dependencies {
implementation 'com.github.gitlab4j:gitlab4j-api:6561c93aaf'
}
```

```xml

com.github.gitlab4j
gitlab4j-api
6561c93aaf

```

```java
//DEPS https://github.com/gitlab4j/gitlab4j-api/tree/6561c93aafa6bf35cb9bad0617127a0c249a8f9f
```

---

### **Usage Examples**

GitLab4J-API is quite simple to use, all you need is the URL to your GitLab server and the Personal Access Token from your GitLab Account Settings page. Once you have that info it is as simple as:
```java
// Create a GitLabApi instance to communicate with your GitLab server
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PERSONAL_ACCESS_TOKEN");

// Get the list of projects your account has access to
List projects = gitLabApi.getProjectApi().getProjects();
```

You can also login to your GitLab server with username, and password:
```java
// Log in to the GitLab server using a username and password
GitLabApi gitLabApi = GitLabApi.oauth2Login("http://your.gitlab.server.com", "username", "password");
```
As of GitLab4J-API 4.6.6, all API requests support performing the API call as if you were another user, provided you are authenticated as an administrator:
```java
// Create a GitLabApi instance to communicate with your GitLab server (must be an administrator)
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PERSONAL_ACCESS_TOKEN");

// sudo as as a different user, in this case the user named "johndoe", all future calls will be done as "johndoe"
gitLabApi.sudo("johndoe")

// To turn off sudo mode
gitLabApi.unsudo();
```

---
### **Setting Request Timeouts**
As of GitLab4J-API 4.14.21 support has been added for setting the conect and read timeouts for the API client:
```java
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN", proxyConfig);

// Set the connect timeout to 1 second and the read timeout to 5 seconds
gitLabApi.setRequestTimeout(1000, 5000);
```

---
### **Connecting Through a Proxy Server**
As of GitLab4J-API 4.8.2 support has been added for connecting to the GitLab server using an HTTP proxy server:
```java
// Log in to the GitLab server using a proxy server (with basic auth on proxy)
Map proxyConfig = ProxyClientConfig.createProxyClientConfig(
"http://your-proxy-server", "proxy-username", "proxy-password");
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN", null, proxyConfig);

// Log in to the GitLab server using a proxy server (no auth on proxy)
Map proxyConfig = ProxyClientConfig.createProxyClientConfig("http://your-proxy-server");
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN", null, proxyConfig);

// Log in to the GitLab server using an NTLM (Windows DC) proxy
Map ntlmProxyConfig = ProxyClientConfig.createNtlmProxyClientConfig(
"http://your-proxy-server", "windows-username", "windows-password", "windows-workstation", "windows-domain");
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN", null, ntlmProxyConfig);
```
See the Javadoc on the GitLabApi class for a complete list of methods accepting the proxy configuration (clientConfiguration parameter)

---
### **GitLab API V3 and V4 Support**
As of GitLab4J-API 4.2.0 support has been added for GitLab API V4. If your application requires GitLab API V3,
you can still use GitLab4J-API by creating your GitLabApi instance as follows:
```java
// Create a GitLabApi instance to communicate with your GitLab server using GitLab API V3
GitLabApi gitLabApi = new GitLabApi(ApiVersion.V3, "http://your.gitlab.server.com", "YOUR_PRIVATE_TOKEN");
```

**NOTICE**:
As of GitLab 11.0 support for the GitLab API v3 has been removed from the GitLab server (see https://about.gitlab.com/2018/06/01/api-v3-removal-impending/). Support for GitLab API v3 will be removed from this library sometime in 2019. If you are utilizing the v3 support, please update your code to use GitLab API v4.

---
### **Logging of API Requests and Responses**
As of GitLab4J-API 4.8.39 support has been added to log the requests to and the responses from the
GitLab API. Enable logging using one of the following methods on the GitLabApi instance:
```java
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PERSONAL_ACCESS_TOKEN");

// Log using the shared logger and default level of FINE
gitLabApi.enableRequestResponseLogging();

// Log using the shared logger and the INFO level
gitLabApi.enableRequestResponseLogging(java.util.logging.Level.INFO);

// Log using the specified logger and the INFO level
gitLabApi.enableRequestResponseLogging(yourLoggerInstance, java.util.logging.Level.INFO);

// Log using the shared logger, at the INFO level, and include up to 1024 bytes of entity logging
gitLabApi.enableRequestResponseLogging(java.util.logging.Level.INFO, 1024);

// Log using the specified logger, at the INFO level, and up to 1024 bytes of entity logging
gitLabApi.enableRequestResponseLogging(yourLoggerInstance, java.util.logging.Level.INFO, 1024);
```

---
### **Results Paging**
GitLab4J-API provides an easy to use paging mechanism to page through lists of results from the GitLab API.
Here are a couple of examples on how to use the Pager:
```java
// Get a Pager instance that will page through the projects with 10 projects per page
Pager projectPager = gitLabApi.getProjectApi().getProjects(10);

// Iterate through the pages and print out the name and description
while (projectPager.hasNext()) {
for (Project project : projectPager.next()) {
System.out.println(project.getName() + " -: " + project.getDescription());
}
}
```

As of GitLab4J-API 4.9.2, you can also fetch all the items as a single list using a Pager instance:
```java
// Get a Pager instance so we can load all the projects into a single list, 10 items at a time:
Pager projectPager = gitlabApi.getProjectsApi().getProjects(10);
List allProjects = projectPager.all();
```

---
### **Java 8 Stream Support**
As of GitLab4J-API 4.9.2, all GitLabJ-API methods that return a List result have a similarlly named method that returns a Java 8 Stream. The Stream returning methods use the following naming convention: ```getXxxxxStream()```.

**IMPORTANT**
The built-in methods that return a Stream do so using ___eager evaluation___, meaning all items are pre-fetched from the GitLab server and a Stream is returned which will stream those items. **Eager evaluation does NOT support parallel reading of data from ther server, it does however allow for parallel processing of the Stream post data fetch.**

To stream using ___lazy evaluation___, use the GitLab4J-API methods that return a ```Pager``` instance, and then call the ```lazyStream()``` method on the ```Pager``` instance to create a lazy evaluation Stream. The Stream utilizes the ```Pager``` instance to page through the available items. **A lazy Stream does NOT support parallel operations or skipping.**

#### **Eager evaluation example usage:**

```java
// Stream the visible projects printing out the project name.
Stream projectStream = gitlabApi.getProjectApi().getProjectsStream();
projectStream.map(Project::getName).forEach(name -> System.out.println(name));

// Operate on the stream in parallel, this example sorts User instances by username
// NOTE: Fetching of the users is not done in parallel,
// only the sorting of the users is a parallel operation.
Stream stream = gitlabApi.getUserApi().getUsersStream();
List users = stream.parallel().sorted(comparing(User::getUsername)).collect(toList());
```

#### **Lazy evaluation example usage:**

```java
// Get a Pager instance to that will be used to lazily stream Project instances.
// In this example, 10 Projects per page will be pre-fetched.
Pager projectPager = gitlabApi.getProjectApi().getProjects(10);

// Lazily stream the Projects, printing out each project name, limit the output to 5 project names
projectPager.lazyStream().limit(5).map(Project::getName).forEach(name -> System.out.println(name));
```

---
### **Java 8 Optional Support**
GitLab4J-API supports Java 8 Optional<T> for API calls that result in the return of a single item. Here is an example on how to use the Java 8 Optional<T> API calls:
```java
Optional optionalGroup = gitlabApi.getGroupApi().getOptionalGroup("my-group-path");
if (optionalGroup.isPresent())
return optionalGroup.get();

return gitlabApi.getGroupApi().addGroup("my-group-name", "my-group-path");
```

---
### **Issue Time Estimates**
GitLab issues allow for time tracking. The following time units are currently available:

* months (mo)
* weeks (w)
* days (d)
* hours (h)
* minutes (m)

Conversion rates are 1mo = 4w, 1w = 5d and 1d = 8h.

---
## Making API Calls
The API has been broken up into sub API classes to make it easier to consume and to separate concerns. The GitLab4J sub API classes typically have a one-to-one relationship with the API documentation at [GitLab API](https://docs.gitlab.com/ce/api/). Following is a sample of the GitLab4J sub API class mapping to the GitLab API documentation:

```org.gitlab4j.api.GroupApi``` -> https://docs.gitlab.com/ce/api/groups.html

```org.gitlab4j.api.MergeRequestApi``` -> https://docs.gitlab.com/ce/api/merge_requests.html

```org.gitlab4j.api.ProjectApi``` -> https://docs.gitlab.com/ce/api/projects.html

```org.gitlab4j.api.UserApi``` -> https://docs.gitlab.com/ce/api/users.html

### **Available Sub APIs**

The following is a list of the available sub APIs along with a sample use of each API. See the Javadocs for a complete list of available methods for each sub API.

---
  [ApplicationsApi](#applicationsapi)

  [ApplicationSettingsApi](#applicationsettingsapi)

  [AuditEventApi](#auditeventapi)

  [AwardEmojiApi](#awardemojiapi)

  [BoardsApi](#boardsapi)

  [CommitsApi](#commitsapi)

  [ContainerRegistryApi](#containerregistryapi)

  [DeployKeysApi](#deploykeysapi)

  [DiscussionsApi](#discussionsapi)

  [EnvironmentsApi](#environmentsapi)

  [EpicsApi](#epicsapi)

  [EventsApi](#eventsapi)

  [GroupApi](#groupapi)

  [HealthCheckApi](#healthcheckapi)

  [ImportExportApi](#importexportapi)

  [IssuesApi](#issuesapi)

  [JobApi](#jobapi)

  [LabelsApi](#labelsapi)

  [LicenseApi](#licenseapi)

  [LicenseTemplatesApi](#licensetemplatesapi)

  [LabelsApi](#labelsapi)

  [MergeRequestApi](#mergerequestapi)

  [MilestonesApi](#milestonesapi)

  [NamespaceApi](#namespaceapi)

  [NotesApi](#notesapi)

  [NotificationSettingsApi](#notificationsettingsapi)

  [PackagesApi](#packagesapi)

  [PipelineApi](#pipelineapi)

  [ProjectApi](#projectapi)

  [ProtectedBranchesApi](#protectedbranchesapi)

  [ReleasesApi](#releasesapi)

  [RepositoryApi](#repositoryapi)

  [RepositoryFileApi](#repositoryfileapi)

  [ReourceLabelEventsApi](#resourcelabeleventsapi)

  [RunnersApi](#runnersapi)

  [SearchApi](#searchapi)

  [ServicesApi](#servicesapi)

  [SessionApi](#sessionapi)

  [SnippetsApi](#snippetsapi)

  [SystemHooksApi](#systemhooksapi)

  [TagsApi](#tagsapi)

  [TodosApi](#todosapi)

  [UserApi](#userapi)

  [WikisApi](#wikisapi)

### Sub API Examples
----------------
#### ApplicationsApi
```java
// Add an OAUTH Application to GitLab
ApplicationScope[] scopes = {ApplicationScope.SUDO, ApplicationScope.PROFILE};
gitLabApi.getApplicationsApi().createApplication("My OAUTH Application", "https//example.com/myapp/callback", scopes);
```

#### ApplicationSettingsApi
```java
// Get the current GitLab server application settings
ApplicationSettings appSettings = gitLabApi.getApplicationSettingsApi().getAppliationSettings();
```

#### AuditEventApi
```java
// Get the current GitLab server audit events for entity
// This uses the ISO8601 date utilities the in org.gitlab4j.api.utils.ISO8601 class
Date since = ISO8601.toDate("2017-01-01T00:00:00Z");
Date until = new Date(); // now
List auditEvents = gitLabApi.getAuditEventApi().getAuditEvents(since, until, EntityType.USER, 1);
```

#### AwardEmojiApi
```java
// Get a list of AwardEmoji belonging to the specified issue (group ID = 1, issues IID = 1)
List awardEmojis = gitLabApi.getAwardEmojiApi().getIssuAwardEmojis(1, 1);
```

#### BoardsApi
```java
// Get a list of the Issue Boards belonging to the specified project
List boards = gitLabApi.getBoardsApi().getBoards(projectId);
```

#### CommitsApi
```java
// Get a list of commits associated with the specified branch that fall within the specified time window
// This uses the ISO8601 date utilities the in org.gitlab4j.api.utils.ISO8601 class
Date since = ISO8601.toDate("2017-01-01T00:00:00Z");
Date until = new Date(); // now
List commits = gitLabApi.getCommitsApi().getCommits(1234, "new-feature", since, until);
```

#### ContainerRegistryApi
```java
// Get a list of the registry repositories belonging to the specified project
List registryRepos = gitLabApi.ContainerRegistryApi().getRepositories(projectId);
```

#### DeployKeysApi
```java
// Get a list of DeployKeys for the authenticated user
List deployKeys = gitLabApi.getDeployKeysApi().getDeployKeys();
```

#### DiscussionsApi
```java
// Get a list of Discussions for the specified merge request
List discussions = gitLabApi.getDiscussionsApi().getMergeRequestDiscussions(projectId, mergeRequestIid);
```

#### EnvironmentsApi
```java
// Get a list of Environments for the specified project
List environments = gitLabApi.getEnvironmentsApi().getEnvironments(projectId);
```

#### EpicsApi
```java
// Get a list epics of the requested group and its subgroups.
List epics = gitLabApi.getEpicsApi().getEpics(1);
```

#### EventsApi
```java
// Get a list of Events for the authenticated user
Date after = new Date(0); // After Epoch
Date before = new Date(); // Before now
List events = gitLabApi.getEventsApi().getAuthenticatedUserEvents(null, null, before, after, DESC);
```

#### GroupApi
```java
// Get a list of groups that you have access to
List groups = gitLabApi.getGroupApi().getGroups();
```

#### HealthCheckApi
```java
// Get the liveness endpoint health check results. Assumes ip_whitelisted per:
// https://docs.gitlab.com/ee/administration/monitoring/ip_whitelist.html
HealthCheckInfo healthCheck = gitLabApi.getHealthCheckApi().getLiveness();
```

#### ImportExportApi
```java
// Schedule a project export for the specified project ID
gitLabApi.getImportExportApi().scheduleExport(projectId);

// Get the project export status for the specified project ID
ExportStatus exportStatus = gitLabApi.getImportExportApi().getExportStatus(projectId);
```

#### IssuesApi
```java
// Get a list of issues for the specified project ID
List issues = gitLabApi.getIssuesApi().getIssues(1234);
```

#### JobApi
```java
// Get a list of jobs for the specified project ID
List jobs = gitLabApi.getJobApi().getJobs(1234);
```

#### LabelsApi
```java
// Get a list of labels for the specified project ID
List labels = gitLabApi.getLabelsApi().getLabels(1234);
```

#### LicenseApi
```java
// Retrieve information about the current license
License license = gitLabApi.getLicenseApi().getLicense();
```

#### LicenseTemplatesApi
```java
// Get a list of open sourcse license templates
List licenses = gitLabApi.getLicenseTemplatesApi().getLicenseTemplates();
```

#### MergeRequestApi
```java
// Get a list of the merge requests for the specified project
List mergeRequests = gitLabApi.getMergeRequestApi().getMergeRequests(1234);
```

#### MilestonesApi
```java
// Get a list of the milestones for the specified project
List milestones = gitLabApi.getMilestonesApi().getMilestones(1234);
```

#### NamespaceApi
```java
// Get all namespaces that match "foobar" in their name or path
List namespaces = gitLabApi.getNamespaceApi().findNamespaces("foobar");
```

#### NotesApi
```java
// Get a list of the issues's notes for project ID 1234, issue IID 1
List notes = gitLabApi.getNotesApi().getNotes(1234, 1);
```

#### NotificationSettingsApi
```java
// Get the current global notification settings
NotificationSettings settings = gitLabApi.getNotificationSettingsApi().getGlobalNotificationSettings();
```

#### PackagesApi
```java
// Get all packages for the specified project ID
List packages = gitLabApi.getPackagesApi().getPackages(1234);
```

#### PipelineApi
```java
// Get all pipelines for the specified project ID
List pipelines = gitLabApi.getPipelineApi().getPipelines(1234);
```

#### ProjectApi
```java
// Get a list of accessible projects
public List projects = gitLabApi.getProjectApi().getProjects();
```
```java
// Create a new project
Project projectSpec = new Project()
.withName("my-project")
.withDescription("My project for demonstration.")
.withIssuesEnabled(true)
.withMergeRequestsEnabled(true)
.withWikiEnabled(true)
.withSnippetsEnabled(true)
.withPublic(true);

Project newProject = gitLabApi.getProjectApi().createProject(projectSpec);
```

#### ProtectedBranchesApi
```java
List branches = gitLabApi.getProtectedBranchesApi().getProtectedBranches(project.getId());
```

#### ReleasesApi
```java
// Get a list of releases for the specified project
List releases = gitLabApi.getReleasesApi().getReleases(projectId);
```

#### RepositoryApi
```java
// Get a list of repository branches from a project, sorted by name alphabetically
List branches = gitLabApi.getRepositoryApi().getBranches(projectId);
```
```java
// Search repository branches from a project, by name
List branches = gitLabApi.getRepositoryApi().getBranches(projectId, searchTerm);
```

#### RepositoryFileApi
```java
// Get info (name, size, ...) and the content from a file in repository
RepositoryFile file = gitLabApi.getRepositoryFileApi().getFile("file-path", 1234, "ref");
```

#### ResourceLabelEventsApi
```java
// Get the label events for the specified merge request
List labelEvents = gitLabApi.getResourceLabelEventsApi()
.getMergeRequestLabelEvents(projectId, mergeRequestIid);
```

#### RunnersApi
```java
// Get All Runners.
List runners = gitLabApi.getRunnersApi().getAllRunners();
```

#### SearchApi
```java
// Do a global search for Projects
List> projects = gitLabApi.getSearchApi().globalSearch(SearchScope.PROJECTS, "text-to-search-for");
```

#### ServicesApi
```java
// Activate/Update the Slack Notifications service
SlackService slackService = new SlackService()
.withMergeRequestsEvents(true)
.withWebhook("https://hooks.slack.com/services/ABCDEFGHI/KJLMNOPQR/wetrewq7897HKLH8998wfjjj")
.withUsername("GitLab4J");
gitLabApi.getServicesApi().updateSlackService("project-path", slackService);
```

#### SessionApi
```java
// Log in to the GitLab server and get the session info
gitLabApi.getSessionApi().login("your-username", "your-email", "your-password");
```

#### SnippetsApi
```java
// Get a list of the authenticated user's snippets
List snippets = gitLabApi.getSnippetsApi().getSnippets();
```

#### SystemHooksApi
```java
// Get a list of installed system hooks
List hooks = gitLabApi.getSystemHooksApi().getSystemHooks();
```

#### TagsApi
```java
// Get a list of tags for the specified project ID
List tags = gitLabApi.getTagsApi().getTags(projectId);
```

#### TodosApi
```java
// Get a list of all pending todos for the current user
List todos = gitLabApi.getTodosApi().gePendingTodos();
```

#### UserApi
```java
// Get the User info for user_id 1
User user = gitLabApi.getUserApi().getUser(1);

// Create a new user with no password who will recieve a reset password email
User userConfig = new User()
.withEmail("[email protected]")
.withName("Jane Doe")
.withUsername("jdoe");
String password = null;
boolean sendResetPasswordEmail = true;
gitLabApi.getUserApi().createUser(userConfig, password, sendResetPasswordEmail);
```

#### WikisApi
```java
// Get a list of pages in project wiki
List wikiPages = gitLabApi.getWikisApi().getPages();
```