Spring Data REST
Exports Spring Data repositories as hypermedia-driven RESTful resources automatically. Provides HATEOAS-compliant endpoints with HAL browser, pagination, sorting, projections, and custom event hooks.
Exports Spring Data repositories as hypermedia-driven RESTful resources automatically. Provides HATEOAS-compliant endpoints with HAL browser, pagination, sorting, projections, and custom event hooks.
openapi: 3.0.3
info:
title: Spring Data REST API
description: >-
Spring Data REST exposes Spring Data repositories as hypermedia-driven
RESTful resources following the HATEOAS constraint. It provides automatic
endpoint generation for CRUD operations, pagination, sorting, projections,
and custom query endpoints derived from repository methods.
version: 4.3.0
contact:
name: Spring Team
url: https://spring.io/projects/spring-data-rest
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0
servers:
- url: http://localhost:8080
description: Default local server
paths:
/:
get:
operationId: listRepositories
summary: List All Exported Repositories
description: Returns the root resource listing all exported Spring Data REST endpoints
tags:
- Discovery
responses:
'200':
description: Root resource with links to all repositories
content:
application/hal+json:
schema:
$ref: '#/components/schemas/RootResource'
/profile:
get:
operationId: getProfile
summary: Get Application Profile
description: Returns the ALPS profile describing all resources and their affordances
tags:
- Profile
responses:
'200':
description: ALPS profile document
content:
application/alps+json:
schema:
type: object
/profile/{resource}:
get:
operationId: getResourceProfile
summary: Get Resource Profile
description: Returns the ALPS profile for a specific repository resource
tags:
- Profile
parameters:
- name: resource
in: path
required: true
schema:
type: string
description: Repository resource name (e.g., users, products)
responses:
'200':
description: Resource ALPS profile
content:
application/alps+json:
schema:
type: object
/{repository}:
get:
operationId: listResources
summary: List Repository Resources
description: Returns a paginated collection of resources from the repository
tags:
- Collection
parameters:
- name: repository
in: path
required: true
schema:
type: string
description: Repository resource path (e.g., users, orders)
- name: page
in: query
required: false
schema:
type: integer
default: 0
description: Zero-based page number
- name: size
in: query
required: false
schema:
type: integer
default: 20
description: Number of items per page
- name: sort
in: query
required: false
schema:
type: array
items:
type: string
description: 'Sort expression (e.g., name,asc or createdAt,desc)'
responses:
'200':
description: Paginated collection of resources
content:
application/hal+json:
schema:
$ref: '#/components/schemas/PagedResource'
post:
operationId: createResource
summary: Create Repository Resource
description: Creates a new resource in the repository
tags:
- Collection
parameters:
- name: repository
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'201':
description: Resource created
headers:
Location:
schema:
type: string
description: URL of the newly created resource
content:
application/hal+json:
schema:
$ref: '#/components/schemas/Resource'
'400':
description: Validation error
/{repository}/{id}:
get:
operationId: getResource
summary: Get Repository Resource by ID
description: Returns a single resource by its identifier
tags:
- Item
parameters:
- name: repository
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Resource found
content:
application/hal+json:
schema:
$ref: '#/components/schemas/Resource'
'404':
description: Resource not found
put:
operationId: replaceResource
summary: Replace Repository Resource
description: Replaces an existing resource entirely (full update)
tags:
- Item
parameters:
- name: repository
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: Resource updated
content:
application/hal+json:
schema:
$ref: '#/components/schemas/Resource'
'404':
description: Resource not found
patch:
operationId: patchResource
summary: Patch Repository Resource
description: Partially updates an existing resource
tags:
- Item
parameters:
- name: repository
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
application/merge-patch+json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: Resource patched
content:
application/hal+json:
schema:
$ref: '#/components/schemas/Resource'
'404':
description: Resource not found
delete:
operationId: deleteResource
summary: Delete Repository Resource
description: Deletes a resource by its identifier
tags:
- Item
parameters:
- name: repository
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Resource deleted
'404':
description: Resource not found
/{repository}/search:
get:
operationId: listSearchMethods
summary: List Search Methods
description: Returns all custom query methods exposed by the repository
tags:
- Search
parameters:
- name: repository
in: path
required: true
schema:
type: string
responses:
'200':
description: Search methods available
content:
application/hal+json:
schema:
$ref: '#/components/schemas/SearchResource'
/{repository}/search/{method}:
get:
operationId: executeSearchMethod
summary: Execute Repository Search Method
description: Executes a custom repository query method
tags:
- Search
parameters:
- name: repository
in: path
required: true
schema:
type: string
- name: method
in: path
required: true
schema:
type: string
description: Query method name as exposed by the repository
- name: page
in: query
required: false
schema:
type: integer
default: 0
- name: size
in: query
required: false
schema:
type: integer
default: 20
- name: sort
in: query
required: false
schema:
type: array
items:
type: string
responses:
'200':
description: Search results
content:
application/hal+json:
schema:
$ref: '#/components/schemas/PagedResource'
'404':
description: Search method not found
/{repository}/{id}/{association}:
get:
operationId: getAssociation
summary: Get Resource Association
description: Returns the associated resource(s) for a given relationship
tags:
- Association
parameters:
- name: repository
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
- name: association
in: path
required: true
schema:
type: string
description: Association name (e.g., address, orders)
responses:
'200':
description: Associated resource(s)
content:
application/hal+json:
schema:
oneOf:
- $ref: '#/components/schemas/Resource'
- $ref: '#/components/schemas/PagedResource'
'404':
description: Resource or association not found
put:
operationId: setAssociation
summary: Set Resource Association
description: Replaces the association links for a resource
tags:
- Association
parameters:
- name: repository
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
- name: association
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
text/uri-list:
schema:
type: string
description: Newline-separated list of resource URIs
responses:
'204':
description: Association updated
'404':
description: Resource not found
delete:
operationId: deleteAssociation
summary: Delete Resource Association
description: Removes all association links for a resource
tags:
- Association
parameters:
- name: repository
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
- name: association
in: path
required: true
schema:
type: string
responses:
'204':
description: Association deleted
'404':
description: Resource not found
components:
schemas:
Link:
type: object
properties:
href:
type: string
description: The URI of the link
templated:
type: boolean
description: Whether the href is a URI template
Links:
type: object
additionalProperties:
$ref: '#/components/schemas/Link'
Resource:
type: object
properties:
_links:
$ref: '#/components/schemas/Links'
additionalProperties: true
PagedResource:
type: object
properties:
_embedded:
type: object
additionalProperties:
type: array
items:
$ref: '#/components/schemas/Resource'
_links:
$ref: '#/components/schemas/Links'
page:
$ref: '#/components/schemas/PageMetadata'
PageMetadata:
type: object
properties:
size:
type: integer
description: Number of items per page
totalElements:
type: integer
description: Total number of items
totalPages:
type: integer
description: Total number of pages
number:
type: integer
description: Current page number (zero-based)
RootResource:
type: object
properties:
_links:
$ref: '#/components/schemas/Links'
SearchResource:
type: object
properties:
_links:
$ref: '#/components/schemas/Links'
tags:
- name: Association
- name: Collection
- name: Discovery
- name: Item
- name: Profile
- name: Search