Optional '/-/' delimiter for search API
'/-/' delimiter is used only in UI, in API we don't use it for other endpoints. To align search endpoints with the rest of API endpoints, this patch makes '/-/' optional for existing endpoints (to keep backward compatibility). Documentation is updated to prefer paths without '/-/'.
This commit is contained in:
parent
cd4ddee0d6
commit
2370ff85fe
4 changed files with 44 additions and 39 deletions
5
changelogs/unreleased/optional-api-delimiter.yml
Normal file
5
changelogs/unreleased/optional-api-delimiter.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Make /-/ delimiter optional for search endpoints
|
||||
merge_request:
|
||||
author:
|
||||
type: changed
|
|
@ -289,7 +289,7 @@ Search within the specified group.
|
|||
If a user is not a member of a group and the group is private, a `GET` request on that group will result to a `404` status code.
|
||||
|
||||
```
|
||||
GET /groups/:id/-/search
|
||||
GET /groups/:id/search
|
||||
```
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
|
@ -305,7 +305,7 @@ The response depends on the requested scope.
|
|||
### Scope: projects
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/-/search?scope=projects&search=flight
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/search?scope=projects&search=flight
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -336,7 +336,7 @@ Example response:
|
|||
### Scope: issues
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/-/search?scope=issues&search=file
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/search?scope=issues&search=file
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -401,7 +401,7 @@ Example response:
|
|||
### Scope: merge_requests
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/-/search?scope=merge_requests&search=file
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/search?scope=merge_requests&search=file
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -478,7 +478,7 @@ Example response:
|
|||
### Scope: milestones
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/-/search?scope=milestones&search=release
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/search?scope=milestones&search=release
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -507,7 +507,7 @@ Search within the specified project.
|
|||
If a user is not a member of a project and the project is private, a `GET` request on that project will result to a `404` status code.
|
||||
|
||||
```
|
||||
GET /projects/:id/-/search
|
||||
GET /projects/:id/search
|
||||
```
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
|
@ -524,7 +524,7 @@ The response depends on the requested scope.
|
|||
### Scope: issues
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/12/-/search?scope=issues&search=file
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/12/search?scope=issues&search=file
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -589,7 +589,7 @@ Example response:
|
|||
### Scope: merge_requests
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=merge_requests&search=file
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/search?scope=merge_requests&search=file
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -666,7 +666,7 @@ Example response:
|
|||
### Scope: milestones
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/12/-/search?scope=milestones&search=release
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/12/search?scope=milestones&search=release
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -691,7 +691,7 @@ Example response:
|
|||
### Scope: notes
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=notes&search=maxime
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/search?scope=notes&search=maxime
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -723,7 +723,7 @@ Example response:
|
|||
### Scope: wiki_blobs
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=wiki_blobs&search=bye
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/search?scope=wiki_blobs&search=bye
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -746,7 +746,7 @@ Example response:
|
|||
### Scope: commits
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=commits&search=bye
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/search?scope=commits&search=bye
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -777,7 +777,7 @@ Example response:
|
|||
### Scope: blobs
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=blobs&search=installation
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/search?scope=blobs&search=installation
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
|
|
@ -84,7 +84,7 @@ module API
|
|||
values: %w(projects issues merge_requests milestones)
|
||||
use :pagination
|
||||
end
|
||||
get ':id/-/search' do
|
||||
get ':id/(-/)search' do
|
||||
present search(group_id: user_group.id), with: entity
|
||||
end
|
||||
end
|
||||
|
@ -103,7 +103,7 @@ module API
|
|||
values: %w(issues merge_requests milestones notes wiki_blobs commits blobs)
|
||||
use :pagination
|
||||
end
|
||||
get ':id/-/search' do
|
||||
get ':id/(-/)search' do
|
||||
present search(project_id: user_project.id), with: entity
|
||||
end
|
||||
end
|
||||
|
|
|
@ -99,10 +99,10 @@ describe API::Search do
|
|||
end
|
||||
end
|
||||
|
||||
describe "GET /groups/:id/-/search" do
|
||||
describe "GET /groups/:id/search" do
|
||||
context 'when user is not authenticated' do
|
||||
it 'returns 401 error' do
|
||||
get api("/groups/#{group.id}/-/search"), scope: 'projects', search: 'awesome'
|
||||
get api("/groups/#{group.id}/search"), scope: 'projects', search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(401)
|
||||
end
|
||||
|
@ -110,7 +110,7 @@ describe API::Search do
|
|||
|
||||
context 'when scope is not supported' do
|
||||
it 'returns 400 error' do
|
||||
get api("/groups/#{group.id}/-/search", user), scope: 'unsupported', search: 'awesome'
|
||||
get api("/groups/#{group.id}/search", user), scope: 'unsupported', search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
end
|
||||
|
@ -118,7 +118,7 @@ describe API::Search do
|
|||
|
||||
context 'when scope is missing' do
|
||||
it 'returns 400 error' do
|
||||
get api("/groups/#{group.id}/-/search", user), search: 'awesome'
|
||||
get api("/groups/#{group.id}/search", user), search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
end
|
||||
|
@ -126,7 +126,7 @@ describe API::Search do
|
|||
|
||||
context 'when group does not exist' do
|
||||
it 'returns 404 error' do
|
||||
get api('/groups/9999/-/search', user), scope: 'issues', search: 'awesome'
|
||||
get api('/groups/9999/search', user), scope: 'issues', search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
end
|
||||
|
@ -136,7 +136,7 @@ describe API::Search do
|
|||
it 'returns 404 error' do
|
||||
private_group = create(:group, :private)
|
||||
|
||||
get api("/groups/#{private_group.id}/-/search", user), scope: 'issues', search: 'awesome'
|
||||
get api("/groups/#{private_group.id}/search", user), scope: 'issues', search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
end
|
||||
|
@ -145,7 +145,7 @@ describe API::Search do
|
|||
context 'with correct params' do
|
||||
context 'for projects scope' do
|
||||
before do
|
||||
get api("/groups/#{group.id}/-/search", user), scope: 'projects', search: 'awesome'
|
||||
get api("/groups/#{group.id}/search", user), scope: 'projects', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/projects'
|
||||
|
@ -155,7 +155,7 @@ describe API::Search do
|
|||
before do
|
||||
create(:issue, project: project, title: 'awesome issue')
|
||||
|
||||
get api("/groups/#{group.id}/-/search", user), scope: 'issues', search: 'awesome'
|
||||
get api("/groups/#{group.id}/search", user), scope: 'issues', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/issues'
|
||||
|
@ -165,7 +165,7 @@ describe API::Search do
|
|||
before do
|
||||
create(:merge_request, source_project: repo_project, title: 'awesome mr')
|
||||
|
||||
get api("/groups/#{group.id}/-/search", user), scope: 'merge_requests', search: 'awesome'
|
||||
get api("/groups/#{group.id}/search", user), scope: 'merge_requests', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/merge_requests'
|
||||
|
@ -175,7 +175,7 @@ describe API::Search do
|
|||
before do
|
||||
create(:milestone, project: project, title: 'awesome milestone')
|
||||
|
||||
get api("/groups/#{group.id}/-/search", user), scope: 'milestones', search: 'awesome'
|
||||
get api("/groups/#{group.id}/search", user), scope: 'milestones', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/milestones'
|
||||
|
@ -187,7 +187,7 @@ describe API::Search do
|
|||
create(:milestone, project: project, title: 'awesome milestone')
|
||||
create(:milestone, project: another_project, title: 'awesome milestone other project')
|
||||
|
||||
get api("/groups/#{CGI.escape(group.full_path)}/-/search", user), scope: 'milestones', search: 'awesome'
|
||||
get api("/groups/#{CGI.escape(group.full_path)}/search", user), scope: 'milestones', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/milestones'
|
||||
|
@ -198,7 +198,7 @@ describe API::Search do
|
|||
describe "GET /projects/:id/search" do
|
||||
context 'when user is not authenticated' do
|
||||
it 'returns 401 error' do
|
||||
get api("/projects/#{project.id}/-/search"), scope: 'issues', search: 'awesome'
|
||||
get api("/projects/#{project.id}/search"), scope: 'issues', search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(401)
|
||||
end
|
||||
|
@ -206,7 +206,7 @@ describe API::Search do
|
|||
|
||||
context 'when scope is not supported' do
|
||||
it 'returns 400 error' do
|
||||
get api("/projects/#{project.id}/-/search", user), scope: 'unsupported', search: 'awesome'
|
||||
get api("/projects/#{project.id}/search", user), scope: 'unsupported', search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
end
|
||||
|
@ -214,7 +214,7 @@ describe API::Search do
|
|||
|
||||
context 'when scope is missing' do
|
||||
it 'returns 400 error' do
|
||||
get api("/projects/#{project.id}/-/search", user), search: 'awesome'
|
||||
get api("/projects/#{project.id}/search", user), search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
end
|
||||
|
@ -222,7 +222,7 @@ describe API::Search do
|
|||
|
||||
context 'when project does not exist' do
|
||||
it 'returns 404 error' do
|
||||
get api('/projects/9999/-/search', user), scope: 'issues', search: 'awesome'
|
||||
get api('/projects/9999/search', user), scope: 'issues', search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
end
|
||||
|
@ -232,7 +232,7 @@ describe API::Search do
|
|||
it 'returns 404 error' do
|
||||
project.update!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
|
||||
|
||||
get api("/projects/#{project.id}/-/search", user), scope: 'issues', search: 'awesome'
|
||||
get api("/projects/#{project.id}/search", user), scope: 'issues', search: 'awesome'
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
end
|
||||
|
@ -243,7 +243,7 @@ describe API::Search do
|
|||
before do
|
||||
create(:issue, project: project, title: 'awesome issue')
|
||||
|
||||
get api("/projects/#{project.id}/-/search", user), scope: 'issues', search: 'awesome'
|
||||
get api("/projects/#{project.id}/search", user), scope: 'issues', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/issues'
|
||||
|
@ -253,7 +253,7 @@ describe API::Search do
|
|||
before do
|
||||
create(:merge_request, source_project: repo_project, title: 'awesome mr')
|
||||
|
||||
get api("/projects/#{repo_project.id}/-/search", user), scope: 'merge_requests', search: 'awesome'
|
||||
get api("/projects/#{repo_project.id}/search", user), scope: 'merge_requests', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/merge_requests'
|
||||
|
@ -263,7 +263,7 @@ describe API::Search do
|
|||
before do
|
||||
create(:milestone, project: project, title: 'awesome milestone')
|
||||
|
||||
get api("/projects/#{project.id}/-/search", user), scope: 'milestones', search: 'awesome'
|
||||
get api("/projects/#{project.id}/search", user), scope: 'milestones', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/milestones'
|
||||
|
@ -273,7 +273,7 @@ describe API::Search do
|
|||
before do
|
||||
create(:note_on_merge_request, project: project, note: 'awesome note')
|
||||
|
||||
get api("/projects/#{project.id}/-/search", user), scope: 'notes', search: 'awesome'
|
||||
get api("/projects/#{project.id}/search", user), scope: 'notes', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/notes'
|
||||
|
@ -284,7 +284,7 @@ describe API::Search do
|
|||
wiki = create(:project_wiki, project: project)
|
||||
create(:wiki_page, wiki: wiki, attrs: { title: 'home', content: "Awesome page" })
|
||||
|
||||
get api("/projects/#{project.id}/-/search", user), scope: 'wiki_blobs', search: 'awesome'
|
||||
get api("/projects/#{project.id}/search", user), scope: 'wiki_blobs', search: 'awesome'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/blobs'
|
||||
|
@ -292,7 +292,7 @@ describe API::Search do
|
|||
|
||||
context 'for commits scope' do
|
||||
before do
|
||||
get api("/projects/#{repo_project.id}/-/search", user), scope: 'commits', search: '498214de67004b1da3d820901307bed2a68a8ef6'
|
||||
get api("/projects/#{repo_project.id}/search", user), scope: 'commits', search: '498214de67004b1da3d820901307bed2a68a8ef6'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/commits_details'
|
||||
|
@ -300,7 +300,7 @@ describe API::Search do
|
|||
|
||||
context 'for commits scope with project path as id' do
|
||||
before do
|
||||
get api("/projects/#{CGI.escape(repo_project.full_path)}/-/search", user), scope: 'commits', search: '498214de67004b1da3d820901307bed2a68a8ef6'
|
||||
get api("/projects/#{CGI.escape(repo_project.full_path)}/search", user), scope: 'commits', search: '498214de67004b1da3d820901307bed2a68a8ef6'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/commits_details'
|
||||
|
@ -308,7 +308,7 @@ describe API::Search do
|
|||
|
||||
context 'for blobs scope' do
|
||||
before do
|
||||
get api("/projects/#{repo_project.id}/-/search", user), scope: 'blobs', search: 'monitors'
|
||||
get api("/projects/#{repo_project.id}/search", user), scope: 'blobs', search: 'monitors'
|
||||
end
|
||||
|
||||
it_behaves_like 'response is correct', schema: 'public_api/v4/blobs', size: 2
|
||||
|
|
Loading…
Reference in a new issue