This tutorial help to read a file from GitLab using API. I am creating a rest API that reads data from GitLab project and returns it in text format data.

Sometimes, we need to read a file from the GitLab repo and modify it, I’ll share a separate tutorial to save a file into GitLab repo using API.

Repository files API helps to fetch, create, update, and delete files from your repository.

Get the file from a repository

The get file API help to receive information about a file in the repository like name, size, and content. File content is Base64 encoded.

This endpoint can be accessed without authentication if the repository is publicly accessible.

The Syntax:

GET /projects/:id/repository/files/:file_path

Read a file from Gitlab Using V4 API

I am using laravel 8 to create an API and expose an endpoint to read files from Gitlab. Let’s create a TestController.php file in Http/Controller folder.

private function _client() {
$token = env('GITLAB_TOKEN');
$client = new Client([
'base_uri' => env("GITLAB_URL"),
'timeout' => 300,
'headers' => ['Content-Type' => 'application/json', "Accept" => "application/json", "PRIVATE-TOKEN" => $token],
'http_errors' => false,
'verify' => false
]);
return $client;
}

First, we’ll create a connect method that’ll connect laravel application with GitLab v4 API.

Let’s create an endpoint that ll use to read files from GitLab.

Route::post('read_gitlab_file_content', 'TestController@getGitlabFileContent');

Create the above method into the controller file:

public function getGitlabFileContent(request $request) { 
$parameters = $request->json()->all();
if(empty($parameters['project_id'])) { 
return $this->jsonpError('project id is empty', 400, 400);   
}
if(empty($parameters['file_path'])) {   
return $this->jsonpError('file_path is empty', 400, 400);   
}
$resp = $this->getFileInRepo($parameters['project_id'], $parameters['file_path']);
return $this->jsonpSuccess($resp);  
}

Let’s define a service method to connect with gitlab API and read files.

public function getFileInRepo($project_id, $filename) {  
$client = $this->_client();     
$response = $client->get("projects/$project_id/repository/files/$filename/raw")->getBody()->getContents();       
return $response;  
}

Genislab Technologies

NexGeneration complete end-2-end software testing & modern development operations tooling & solutions

Do you want to discuss your testing requirements with us? please don’t hesitate to hit the contact us button below, and we will get back to you at our earliest..