This package is used to make it easier when you want to integrate with the strapi
Gits Strapi
# Prerequisites
This library uses the gits_http package
# Yout must know
Requests return a response as an object which usually includes the following keys:
data
: the response data itself, which could be:- a single entry, as an object with the following keys:
id
(number)attributes
(object)meta
(object)
- a list of entries, as an array of objects
- a custom response
- a single entry, as an object with the following keys:
meta
(object): information about pagination, publication state, available locales, etc.error
(object, optional): information about any error thrown by the request
# Usage
First of all, initialize the gits_strapi in this way
final GitsStrapi strapi = GitsStrapi(
timeout: 30000,
showLog: true,
gitsInspector: GitsInspector(),
);
after that we can use some main functions like
Auth Login
Used for standard strapi login needs, if there is a need beyond that then use another function
AuthResponse loginResponse = await strapi.login(
endpoint: Uri.parse("http://10.0.2.2:1337/api/auth/local"),
body: {"identifier": "identifier", "password": "password"});
Auth Register
Used for standard strapi register needs, if there is a need beyond that then use another function
AuthResponse registerResponse = await strapi.register(
endpoint: Uri.parse("http://10.0.2.2:1337/api/auth/local/register"),
body: {
"username": "username",
"email": "email",
"password": "password"
});
Get Single Response
Used to retrieve data for a single object, if you need to retrieve a lot of data use Get Collection Response
Uri endpointProductOne =
Uri.parse("http://10.0.2.2:1337/api/products/1").withParam(
const StrapiRequest(
populate: ["images"],
),
);
SingleResponse<DataResponse<ProductResponse>> singleResponse =
await strapi.getSingle(endpoint: endpointProductOne).then((value) {
var attr = ProductResponse.fromMap(value.data?.attributes);
var data = DataResponse(id: value.data?.id, attributes: attr);
return SingleResponse(data: data, meta: value.meta, error: value.error);
});
Get Collection Response
Used to retrieve data based on a list of objects, if necessary retrieve single object data Get Single Response
Uri endpointProducts = Uri.parse("http://10.0.2.2:1337/api/products")
.withParam(
const StrapiRequest(page: 1, pageSize: 3, sort: ['id:desc']));
CollectionResponse<DataResponse<ProductResponse>> collectionResponse =
await strapi.getCollection(endpoint: endpointProducts).then((value) {
var data = <DataResponse<ProductResponse>>[];
value.data?.forEach((item) {
data.add(
DataResponse(
id: item.id,
attributes: ProductResponse.fromMap(item.attributes),
),
);
});
return CollectionResponse(
data: data, meta: value.meta, error: value.error);
});
(Get) Select
Used for GET
method requirements
Response select = await strapi.select(endpoint: Uri.parse("endpoint"));
(POST) Create
Used for POST
method requirements
var insertBody = {
"data": {
"name": "name",
"description": "description",
"price": 10000,
"stock": 5,
}
};
Response insert = await strapi.create(
endpoint: Uri.parse("http://10.0.2.2:1337/api/products"),
headers: {
'Authorization':
'Bearer eyJhxdcfOgJwUwI1NiIsInR5cCI6IkpXVCJ9.eyJaZcIvMiwfaWF0IjoxNjYxMjM2OTgwLCJleHAiOjE2NjM4Mjg5ODB9.Cb-wP8EUPUcwp76VD_IWqsw5nvi9xv0QqH0Ng4EB1UI'
},
body: insertBody);
(PUT) Update
Used for PUT
method requirements
var updateBody = {
"data": {
"name": "name",
"description": "description",
"price": 50000,
"stock": 3,
}
};
Response updateResponse = await strapi.update(
id: "1",
endpoint: Uri.parse("http://10.0.2.2:1337/api/products"),
headers: {
'Authorization':
'Bearer eyJhbGciOiJIazIwdivsPnRKDCI6IkpXVCJ9.eyJpZCI6MiwiaWF0IjoxNjYxMjM2OTUCLVJleHAiOjE2NjM4Mjg5ODB9.Cb-wP8EUPUcwp76VD_IWqsw5nvi9xv0QqH0Ng4EB1UI'
},
body: updateBody)
Delete
Used for DELETE
method requirement
Response deleteResponse = await strapi.delete(headers: {
'Authorization':
'Bearer eyJhbGciOiJIUzI1NiIsInCX5FCI6IkpXVCJ9.eyJpZCI6MiwiaWF0IjoxNjYxMjM2OTgwLCJleHA_1OjE2NjM4Mjg5ODB9.Cb-wP8EUPUcwp76VD_IWWsC5GFvi9xv0QqH0Ng4EB1UI'
}, endpoint: Uri.parse("http://10.0.2.2:1337/api/products"), id: "9");
# Helper
Strapi Request
we have provided some required parameter requests such as:
- populate `List
- fields `List
- sort `List
- withCount `bool`
- pageSize `pageSize`
- page `page`
for an example like this
StrapiRequest(
fields: ['id','name'],
populate: ['images','transactions'],
sort: ['id:desc'],
page: 1,
pageSize: 10,
withCount: true,
);
Entity Mapper
As for the need to convert Response to Entity
which has been provided for some Base Response
below:
- SingleResponse
- CollectionResponse
- DataResponse
- MetaResponse
- PaginationResponse
- ErrorResponse
- AuthResponse
- UserResponse
- ThumbnailResponse
- FormatsResponse
- ImageResponse
how to use it like this for responses which have generic class
var collectionEntity = collectionResponse.toEntity(
(data) => data
.map((item) => (item as DataResponse)
.toEntity((attr) => (attr as ProductResponse).toEntity()))
.toList(),
);
if it doesn't have a generic class
ProductResponse().toEntity();
Additional information
For additional information we have several main response bases that will be used frequently
- SingleResponse : to handle response {"data (single object)","meta","error"}
- CollectionResponse : to handle response {"data (is an array object)","meta","error"}
- DataResponse : to handle response {"id","attributes"}