Package to easily develop REST API following JSON API specification.
Why
First of all I created this to support development of .
Just like the rest of the packages that make up the framework, I make the most of other existing libraries that are well tested on a day-to-day basis. The idea is not to reinvent the wheel, just join the ideas in a lightweight framework (the focus is on the client side), simple to use and make the code on the front more beautiful and organized.
Install
npm install @kernel-js/api
Class Directory
Common Class
Common Triggers Methods
getEntity
getContent
getUrl
getUrlConfig
Common Request Methods
all
find
search*
save
delete
attach
detach
createPivot
deletePivot
Common Fetching Methods
with
select
orderByAsc
orderByDesc
where
limit
Building Classes
Base Entity Class
É necessário criar uma classe que herdará e sobrescreverá os métodos dessa classe dentro da sua aplicação Essa mesma classe vai ser herdada pelas entidades da aplicação.
export default class Entity extends EntityManager {
async request (config) {
return Axios.request(config); // Você retornará a instancia do axios na sua aplicação
}
baseUrl() {
return 'http://127.0.0.1:8000/api'
}
}
Aplication Entity Class
Você sobrescreverá os métodos de Entity na sua aplication-entity (user) informando os dados e relacionamentos da mesma.
let post: Post = new Post();
let posts: Array<Post> = post.all().getEntity();
/api/posts
GEThttps://api.kernel.com/v1/api/posts
This endpoint allows you to get posts.
{
"data": [
{
"type": "posts",
"id": "1",
"attributes": {
"slug": "ut-ut-similique-et-cumque-laboriosam-occaecati",
"title": "Ut ut similique et cumque laboriosam occaecati.",
"subtitle": "Eos enim impedit neque libero nihil molestiae aspernatur atque. Numquam temporibus quia omnis ut.",
"body": "Sunt sit ut doloremque voluptas. Iusto omnis labore illum id.\n\nExercitationem dolor quae ullam et id a. Architecto repellendus saepe odio. Voluptates accusantium ut doloremque suscipit. Vel velit cumque omnis sed.\n\nMaiores voluptates soluta aut qui praesentium. Ab modi voluptas porro animi. Perspiciatis occaecati qui quo dignissimos et. Autem repudiandae dolorem rem nesciunt.",
"published_at": "2019-06-26"
},
"links": {
"self": "/api/posts/1"
}
},
{
"type": "posts",
"id": "2",
"attributes": {
"slug": "totam-laboriosam-cupiditate-cupiditate-repudiandae-est-aut-dolores",
"title": "Totam laboriosam cupiditate cupiditate repudiandae est aut dolores.",
"subtitle": "Aperiam ut et sequi perspiciatis. Quasi aut porro voluptatem distinctio nihil.",
"body": "Sit atque deleniti explicabo placeat. Distinctio omnis possimus explicabo minus similique vitae. Ut culpa officia et fugit libero totam. Et repellat ducimus ipsa impedit placeat. Consectetur reprehenderit qui reiciendis.\n\nExpedita aliquid nobis est praesentium fuga quia. Ut dolores tempora quidem sunt ea.\n\nTempore consequatur quis pariatur non tempore eum. Dolorem dignissimos impedit possimus dolorem ad id. Eum voluptatem dolor voluptate voluptatem.",
"published_at": "2019-06-25"
},
"links": {
"self": "/api/posts/2"
}
},
]
}
Find
let post: Post = new Post();
post = post.find(1).getEntity();
/api/posts/1
GEThttps://api.kernel.com/v1/api/posts/1
{
"data": [
{
"type": "posts",
"id": "1",
"attributes": {
"slug": "ut-ut-similique-et-cumque-laboriosam-occaecati",
"title": "Ut ut similique et cumque laboriosam occaecati.",
"subtitle": "Eos enim impedit neque libero nihil molestiae aspernatur atque. Numquam temporibus quia omnis ut.",
"body": "Sunt sit ut doloremque voluptas. Iusto omnis labore illum id.\n\nExercitationem dolor quae ullam et id a. Architecto repellendus saepe odio. Voluptates accusantium ut doloremque suscipit. Vel velit cumque omnis sed.\n\nMaiores voluptates soluta aut qui praesentium. Ab modi voluptas porro animi. Perspiciatis occaecati qui quo dignissimos et. Autem repudiandae dolorem rem nesciunt.",
"published_at": "2019-06-26"
},
"links": {
"self": "/api/posts/1"
}
},
]
}
Paginate
let post: Post = new Post();
let posts: Array<Post> = post.paginate(5, 1).all().getEntity();
{
"data": [
{
"type": "posts",
"id": "1",
"attributes": {
"slug": "ut-ut-similique-et-cumque-laboriosam-occaecati",
"title": "Ut ut similique et cumque laboriosam occaecati.",
"subtitle": "Eos enim impedit neque libero nihil molestiae aspernatur atque. Numquam temporibus quia omnis ut.",
"body": "Sunt sit ut doloremque voluptas. Iusto omnis labore illum id.\n\nExercitationem dolor quae ullam et id a. Architecto repellendus saepe odio. Voluptates accusantium ut doloremque suscipit. Vel velit cumque omnis sed.\n\nMaiores voluptates soluta aut qui praesentium. Ab modi voluptas porro animi. Perspiciatis occaecati qui quo dignissimos et. Autem repudiandae dolorem rem nesciunt.",
"published_at": "2019-06-26"
},
"links": {
"self": "/api/posts/1"
}
},
{
"type": "posts",
"id": "2",
"attributes": {
"slug": "totam-laboriosam-cupiditate-cupiditate-repudiandae-est-aut-dolores",
"title": "Totam laboriosam cupiditate cupiditate repudiandae est aut dolores.",
"subtitle": "Aperiam ut et sequi perspiciatis. Quasi aut porro voluptatem distinctio nihil.",
"body": "Sit atque deleniti explicabo placeat. Distinctio omnis possimus explicabo minus similique vitae. Ut culpa officia et fugit libero totam. Et repellat ducimus ipsa impedit placeat. Consectetur reprehenderit qui reiciendis.\n\nExpedita aliquid nobis est praesentium fuga quia. Ut dolores tempora quidem sunt ea.\n\nTempore consequatur quis pariatur non tempore eum. Dolorem dignissimos impedit possimus dolorem ad id. Eum voluptatem dolor voluptate voluptatem.",
"published_at": "2019-06-25"
},
"links": {
"self": "/api/posts/2"
}
}
],
"meta": {
"pagination": {
"total": 10,
"count": 2,
"per_page": 2,
"current_page": 1,
"total_pages": 5
}
},
"links": {
"self": "https://api.kernel.com/api/posts?page%5Bsize%5D=2&page%5Bnumber%5D=1",
"first": "https://api.kernel.com/api/posts?page%5Bsize%5D=2&page%5Bnumber%5D=1",
"next": "https://api.kernel.com/api/posts?page%5Bsize%5D=2&page%5Bnumber%5D=2",
"last": "https://api.kernel.com/api/posts?page%5Bsize%5D=2&page%5Bnumber%5D=5"
}
}
Save
// Create - POST
let newPost: Post = new Post();
newPost.attribute.title = 'Lorem';
newPost.save();
// Edit - PUT
let post : Post = new Post();
post = post.find(1).getEntity();
post.attribute.title = 'Lorem';
post.save();
Create
/api/posts
POSThttps://api.kernel.com/api/posts
Update
/api/posts/1
PUThttps://api.kernel.com/api/posts/1
Delete
let post: Post = new Post();
post = post.find(1).getEntity();
post.delete();
/api/posts
DELETEhttps://api.kernel.com/api/posts/1
With
let post: Post = new Post();
post = post.with('tags', 'author').find(1).getEntity();