mirror of
https://github.com/strapi/strapi.git
synced 2025-11-08 06:07:41 +00:00
Update documentation of api endpoints and queries
This commit is contained in:
parent
fc36055ff6
commit
de3c9e440d
@ -4,7 +4,7 @@ Strapi provides a utility function `strapi.query` to make database queries.
|
|||||||
|
|
||||||
You can just call `strapi.query('modelName', 'pluginName')` to access the query API for any model.
|
You can just call `strapi.query('modelName', 'pluginName')` to access the query API for any model.
|
||||||
|
|
||||||
These queries handle for you specific Strapi features like `groups`, `filters` and `search`.
|
These queries handle for you specific Strapi features like `components`, `dynamic zones`, `filters` and `search`.
|
||||||
|
|
||||||
## API Reference
|
## API Reference
|
||||||
|
|
||||||
@ -97,7 +97,20 @@ Creates an entry in the database and returns the entry.
|
|||||||
```js
|
```js
|
||||||
strapi.query('restaurant').create({
|
strapi.query('restaurant').create({
|
||||||
name: 'restaurant name',
|
name: 'restaurant name',
|
||||||
// this is a group field. the order is persisted in db.
|
// this is a dynamiczone field. the order is persisted in db.
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
__component: 'blog.rich-text',
|
||||||
|
title: 'some title',
|
||||||
|
subTitle: 'some sub title',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
__component: 'blog.quote',
|
||||||
|
quote: 'Some interesting quote',
|
||||||
|
author: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// this is a component field. the order is persisted in db.
|
||||||
opening_hours: [
|
opening_hours: [
|
||||||
{
|
{
|
||||||
day_interval: 'Mon',
|
day_interval: 'Mon',
|
||||||
@ -134,6 +147,18 @@ strapi.query('restaurant').update(
|
|||||||
{ id: 1 },
|
{ id: 1 },
|
||||||
{
|
{
|
||||||
name: 'restaurant name',
|
name: 'restaurant name',
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
__component: 'blog.rich-text',
|
||||||
|
title: 'some title',
|
||||||
|
subTitle: 'some sub title',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
__component: 'blog.quote',
|
||||||
|
quote: 'Some interesting quote',
|
||||||
|
author: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
opening_hours: [
|
opening_hours: [
|
||||||
{
|
{
|
||||||
day_interval: 'Mon',
|
day_interval: 'Mon',
|
||||||
@ -154,15 +179,29 @@ strapi.query('restaurant').update(
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
When updating an entry with its groups beware that if you send the groups without any `id` the previous groups will be deleted and replaced. You can update the groups by sending their `id` with the rest of the fields:
|
When updating an entry with its components or dynamiczones beware that if you send the components without any `id` the previous components will be deleted and replaced. You can update the components by sending their `id` with the rest of the fields:
|
||||||
|
|
||||||
**Update by id and update previous groups**
|
**Update by id and update previous components**
|
||||||
|
|
||||||
```js
|
```js
|
||||||
strapi.query('restaurant').update(
|
strapi.query('restaurant').update(
|
||||||
{ id: 1 },
|
{ id: 1 },
|
||||||
{
|
{
|
||||||
name: 'Mytitle',
|
name: 'Mytitle',
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
__component: 'blog.rich-text',
|
||||||
|
id: 1,
|
||||||
|
title: 'some title',
|
||||||
|
subTitle: 'some sub title',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
__component: 'blog.quote',
|
||||||
|
id: 1,
|
||||||
|
quote: 'Some interesting quote',
|
||||||
|
author: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
opening_hours: [
|
opening_hours: [
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
|
|||||||
@ -2,25 +2,36 @@
|
|||||||
|
|
||||||
When you create a `Content Type` you will have a certain number of **REST API endpoints** available to interact with it.
|
When you create a `Content Type` you will have a certain number of **REST API endpoints** available to interact with it.
|
||||||
|
|
||||||
As an **example** let's consider the `Restaurant` as a **Content Type** and `Openning_hours` as a **Group** for the next steps.
|
As an **example** let's consider the following models:
|
||||||
|
|
||||||
|
**Content Type**:
|
||||||
|
|
||||||
|
- `Restaurant`
|
||||||
|
|
||||||
|
**Components**:
|
||||||
|
|
||||||
|
- `Openning hours` (category: `restaurant`)
|
||||||
|
- `Title With Subtitle` (category: `content`)
|
||||||
|
- `Image With Description` (category: `content`)
|
||||||
|
|
||||||
:::: tabs
|
:::: tabs
|
||||||
|
|
||||||
::: tab "Content Type"
|
::: tab "Content Types"
|
||||||
|
|
||||||
### `Restaurant` Content Type
|
### `Restaurant` Content Type
|
||||||
|
|
||||||
| Fields | Type | Description | Options |
|
| Fields | Type | Description | Options |
|
||||||
| :------------ | :----- | :------------------------------- | :----------- |
|
| :------------ | :---------- | :----------------------------------- | :----------- |
|
||||||
| name | string | Restaurant's title | |
|
| name | string | Restaurant's title | |
|
||||||
| cover | media | Restaurant's cover image | |
|
| cover | media | Restaurant's cover image | |
|
||||||
| opening_hours | group | Restaurant's opening hours group | `repeatable` |
|
| content | dynamiczone | The restaurant profile content | |
|
||||||
|
| opening_hours | component | Restaurant's opening hours component | `repeatable` |
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: tab Group
|
::: tab Components
|
||||||
|
|
||||||
### `Opening_hours` Group
|
### `Opening hours` Component
|
||||||
|
|
||||||
| Fields | Type | Description |
|
| Fields | Type | Description |
|
||||||
| :----------- | :----- | :------------------ |
|
| :----------- | :----- | :------------------ |
|
||||||
@ -28,6 +39,25 @@ As an **example** let's consider the `Restaurant` as a **Content Type** and `Ope
|
|||||||
| opening_hour | string | Meta's opening hour |
|
| opening_hour | string | Meta's opening hour |
|
||||||
| closing_hour | string | Meta's closing hour |
|
| closing_hour | string | Meta's closing hour |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `Image With Description` Component
|
||||||
|
|
||||||
|
| Fields | Type | Description |
|
||||||
|
| :------- | :----- | :------------ |
|
||||||
|
| title | string | The title |
|
||||||
|
| subTitle | string | the sub title |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `ImageWithDescription` Component
|
||||||
|
|
||||||
|
| Fields | Type | Description |
|
||||||
|
| :---------- | :----- | :------------------- |
|
||||||
|
| image | media | The image file |
|
||||||
|
| title | string | the image title |
|
||||||
|
| description | text | the image dscription |
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::::
|
::::
|
||||||
@ -195,8 +225,35 @@ GET http://localhost:1337/restaurants
|
|||||||
"cover": {
|
"cover": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
||||||
//...
|
|
||||||
},
|
},
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"__component": "content.title-with-subtitle",
|
||||||
|
"id": 1,
|
||||||
|
"title": "Restaurant 1 title",
|
||||||
|
"subTitle": "Cozy restaurant in the valley"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__component": "content.image-with-description",
|
||||||
|
"id": 1,
|
||||||
|
"image": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "image.png",
|
||||||
|
"hash": "123456712DHZAUD81UDZQDAZ",
|
||||||
|
"sha256": "v",
|
||||||
|
"ext": ".png",
|
||||||
|
"mime": "image/png",
|
||||||
|
"size": 122.95,
|
||||||
|
"url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png",
|
||||||
|
"provider": "local",
|
||||||
|
"provider_metadata": null,
|
||||||
|
"created_at": "2019-12-09T00:00:00.000Z",
|
||||||
|
"updated_at": "2019-12-09T00:00:00.000Z"
|
||||||
|
},
|
||||||
|
"title": "Amazing photography",
|
||||||
|
"description": "This is an amazing photography taken..."
|
||||||
|
}
|
||||||
|
],
|
||||||
"opening_hours": [
|
"opening_hours": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
@ -204,7 +261,6 @@ GET http://localhost:1337/restaurants
|
|||||||
"opening_hour": "7:30 PM",
|
"opening_hour": "7:30 PM",
|
||||||
"closing_hour": "10:00 PM"
|
"closing_hour": "10:00 PM"
|
||||||
}
|
}
|
||||||
//...
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -229,8 +285,35 @@ GET http://localhost:1337/restaurants/1
|
|||||||
"cover": {
|
"cover": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
||||||
//...
|
|
||||||
},
|
},
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"__component": "content.title-with-subtitle",
|
||||||
|
"id": 1,
|
||||||
|
"title": "Restaurant 1 title",
|
||||||
|
"subTitle": "Cozy restaurant in the valley"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__component": "content.image-with-description",
|
||||||
|
"id": 1,
|
||||||
|
"image": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "image.png",
|
||||||
|
"hash": "123456712DHZAUD81UDZQDAZ",
|
||||||
|
"sha256": "v",
|
||||||
|
"ext": ".png",
|
||||||
|
"mime": "image/png",
|
||||||
|
"size": 122.95,
|
||||||
|
"url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png",
|
||||||
|
"provider": "local",
|
||||||
|
"provider_metadata": null,
|
||||||
|
"created_at": "2019-12-09T00:00:00.000Z",
|
||||||
|
"updated_at": "2019-12-09T00:00:00.000Z"
|
||||||
|
},
|
||||||
|
"title": "Amazing photography",
|
||||||
|
"description": "This is an amazing photography taken..."
|
||||||
|
}
|
||||||
|
],
|
||||||
"opening_hours": [
|
"opening_hours": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
@ -272,6 +355,19 @@ POST http://localhost:1337/restaurants
|
|||||||
{
|
{
|
||||||
"title": "Restaurant 1",
|
"title": "Restaurant 1",
|
||||||
"cover": 1,
|
"cover": 1,
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"__component": "content.title-with-subtitle",
|
||||||
|
"title": "Restaurant 1 title",
|
||||||
|
"subTitle": "Cozy restaurant in the valley"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__component": "content.image-with-description",
|
||||||
|
"image": 1, // user form data to upload the file or an id to reference an exisiting image
|
||||||
|
"title": "Amazing photography",
|
||||||
|
"description": "This is an amazing photography taken..."
|
||||||
|
}
|
||||||
|
],
|
||||||
"opening_hours": [
|
"opening_hours": [
|
||||||
{
|
{
|
||||||
"day_interval": "Tue - Sat",
|
"day_interval": "Tue - Sat",
|
||||||
@ -291,8 +387,35 @@ POST http://localhost:1337/restaurants
|
|||||||
"cover": {
|
"cover": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
||||||
//...
|
|
||||||
},
|
},
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"__component": "content.title-with-subtitle",
|
||||||
|
"id": 1,
|
||||||
|
"title": "Restaurant 1 title",
|
||||||
|
"subTitle": "Cozy restaurant in the valley"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__component": "content.image-with-description",
|
||||||
|
"id": 1,
|
||||||
|
"image": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "image.png",
|
||||||
|
"hash": "123456712DHZAUD81UDZQDAZ",
|
||||||
|
"sha256": "v",
|
||||||
|
"ext": ".png",
|
||||||
|
"mime": "image/png",
|
||||||
|
"size": 122.95,
|
||||||
|
"url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png",
|
||||||
|
"provider": "local",
|
||||||
|
"provider_metadata": null,
|
||||||
|
"created_at": "2019-12-09T00:00:00.000Z",
|
||||||
|
"updated_at": "2019-12-09T00:00:00.000Z"
|
||||||
|
},
|
||||||
|
"title": "Amazing photography",
|
||||||
|
"description": "This is an amazing photography taken..."
|
||||||
|
}
|
||||||
|
],
|
||||||
"opening_hours": [
|
"opening_hours": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
@ -318,6 +441,21 @@ PUT http://localhost:1337/restaurants/1
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"title": "Restaurant 1",
|
"title": "Restaurant 1",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"__component": "content.title-with-subtitle",
|
||||||
|
// editing one of the previous item by passing its id
|
||||||
|
"id": 2,
|
||||||
|
"title": "Restaurant 1 title",
|
||||||
|
"subTitle": "Cozy restaurant in the valley"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__component": "content.image-with-description",
|
||||||
|
"image": 1, // user form data to upload the file or an id to reference an exisiting image
|
||||||
|
"title": "Amazing photography",
|
||||||
|
"description": "This is an amazing photography taken..."
|
||||||
|
}
|
||||||
|
],
|
||||||
"opening_hours": [
|
"opening_hours": [
|
||||||
{
|
{
|
||||||
// adding a new item
|
// adding a new item
|
||||||
@ -345,8 +483,35 @@ PUT http://localhost:1337/restaurants/1
|
|||||||
"cover": {
|
"cover": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
||||||
//...
|
|
||||||
},
|
},
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"__component": "content.title-with-subtitle",
|
||||||
|
"id": 1,
|
||||||
|
"title": "Restaurant 1 title",
|
||||||
|
"subTitle": "Cozy restaurant in the valley"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__component": "content.image-with-description",
|
||||||
|
"id": 2,
|
||||||
|
"image": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "image.png",
|
||||||
|
"hash": "123456712DHZAUD81UDZQDAZ",
|
||||||
|
"sha256": "v",
|
||||||
|
"ext": ".png",
|
||||||
|
"mime": "image/png",
|
||||||
|
"size": 122.95,
|
||||||
|
"url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png",
|
||||||
|
"provider": "local",
|
||||||
|
"provider_metadata": null,
|
||||||
|
"created_at": "2019-12-09T00:00:00.000Z",
|
||||||
|
"updated_at": "2019-12-09T00:00:00.000Z"
|
||||||
|
},
|
||||||
|
"title": "Amazing photography",
|
||||||
|
"description": "This is an amazing photography taken..."
|
||||||
|
}
|
||||||
|
],
|
||||||
"opening_hours": [
|
"opening_hours": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
@ -383,8 +548,35 @@ DELETE http://localhost:1337/restaurants/1
|
|||||||
"cover": {
|
"cover": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
|
||||||
//...
|
|
||||||
},
|
},
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"__component": "content.title-with-subtitle",
|
||||||
|
"id": 1,
|
||||||
|
"title": "Restaurant 1 title",
|
||||||
|
"subTitle": "Cozy restaurant in the valley"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__component": "content.image-with-description",
|
||||||
|
"id": 2,
|
||||||
|
"image": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "image.png",
|
||||||
|
"hash": "123456712DHZAUD81UDZQDAZ",
|
||||||
|
"sha256": "v",
|
||||||
|
"ext": ".png",
|
||||||
|
"mime": "image/png",
|
||||||
|
"size": 122.95,
|
||||||
|
"url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png",
|
||||||
|
"provider": "local",
|
||||||
|
"provider_metadata": null,
|
||||||
|
"created_at": "2019-12-09T00:00:00.000Z",
|
||||||
|
"updated_at": "2019-12-09T00:00:00.000Z"
|
||||||
|
},
|
||||||
|
"title": "Amazing photography",
|
||||||
|
"description": "This is an amazing photography taken..."
|
||||||
|
}
|
||||||
|
],
|
||||||
"opening_hours": [
|
"opening_hours": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
|
|||||||
@ -213,8 +213,8 @@ And for your files, they have to be prefixed by `files`.
|
|||||||
Example here with cover attribute `files.cover`.
|
Example here with cover attribute `files.cover`.
|
||||||
|
|
||||||
::: tip
|
::: tip
|
||||||
If you want to upload files for a group, you will have to specify the inidex of the item you wan to add the file.
|
If you want to upload files for a component, you will have to specify the inidex of the item you wan to add the file.
|
||||||
Example `files.my_group_name[the_index].attribute_name`
|
Example `files.my_component_name[the_index].attribute_name`
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: warning
|
::: warning
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user