1660285817
В этом блоге мы расскажем вам, как создавать службы на основе REST с использованием Knex и PostgreSQL.
Knex — это универсальный, портативный и приятный конструктор SQL-запросов для PostgreSQL, CockroachDB, MSSQL, MySQL, MariaDB, SQLite3, Better-SQLite3, Oracle и Amazon Redshift, а PostgreSQL — это система управления объектно-реляционными базами данных с открытым исходным кодом с высокая степень гибкости. Он способен обрабатывать широкий спектр вариантов использования, включая отдельные машины, хранилища данных и веб-сервисы с несколькими одновременными пользователями. Это система управления реляционной базой данных, которая использует и расширяет SQL (отсюда и название) и широко расширяема для различных вариантов использования, помимо транзакционных данных.
PostgreSQL хранит информацию в таблицах (называемых отношениями), которые содержат кортежи, представляющие сущности (например, документы и людей) и отношения (например, авторство). Атрибуты фиксированного типа, которые представляют свойства объекта (например, заголовок), а также первичный ключ, включаются в отношения. Типы атрибутов могут быть атомарными (например, целым числом, с плавающей запятой или логическим значением) или структурированными (например, массивом, вложенным JSON или процедурой).
Большинство разработчиков используют Knex в качестве построителя запросов по следующим причинам.
Поскольку это практическое демонстрационное руководство, для начала убедитесь, что ваши системы соответствуют следующим требованиям:
npm i -g knex
)Выполнив вышеуказанные требования, давайте создадим новую базу данных с помощью Arctype. Для начала запустите клиент Arctype , затем выберите базу данных, с которой вы хотите работать:
Выбор СУБД в Arctype
Затем укажите учетные данные соответствующей базы данных. Здесь все очень просто, никаких хлопот!
Определение учетных данных базы данных
Если у вас уже настроена база данных, вы всегда можете создать новую, добавив новый источник данных:
Добавление нового источника данных в Arctype
После того, как вы закончите, вы должны увидеть таблицы под вашей базой данных с левой стороны в Arctype.
Теперь создайте новую папку для своего проекта и инициализируйте новый проект с помощью приведенных ниже команд.
mkdir knex-demo && cd knex-demo
npm init -y
Затем установите необходимые пакеты, выполнив следующую команду:
npm install pg express knex
С помощью приведенной выше команды вы установили модуль PostgreSQL Node.js express
, и knex
модуль.
Теперь создайте следующую структуру папок ниже в папке knex-demo.
📦knex-demo
┣ 📂src
┃ ┣ 📂config
┃ ┣ 📂controller
┃ ┣ 📂routes
┃ ┣ 📂service
┃ ┗ 📜app.js
┣ 📜package-lock.json
┗ 📜package.json
Затем в app.js
файле создайте сервер Node.js Express с приведенным ниже фрагментом кода.
const express = require("express");
const app = express();
app.use(express.json());
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
Наконец, измените package.json
файл, чтобы добавить команду сценария.
"scripts": {
"start": "node src/app.js"
},
После того, как вы создали базу данных, давайте настроим Knex и подключимся к базе данных. Чтобы начать, выполните приведенную ниже команду на своем терминале, чтобы инициализировать knex.
knex init
Приведенная выше команда создаст knexfile.js
файл в корневом каталоге вашего проекта с фрагментами кода для подключения вашей базы данных к различным средам (разработка, подготовка, производство). По умолчанию она использует базу данных SQLite в среде разработки, вам нужно изменить код для использования вашей базы данных Postgres.
// Update with your config settings.
/**
* @type { Object.<string, import("knex").Knex.Config> }
*/
module.exports = {
development: {
client: "postgresql",
connection: {
database: "blogs",
user: "postgres",
password: "1234",
},
},
staging: {
client: "postgresql",
connection: {
database: "<Your Staging DB>",
user: "username",
password: "password",
},
pool: {
min: 2,
max: 10,
},
migrations: {
tableName: "knex_migrations",
},
},
production: {
client: "postgresql",
connection: {
database: "<Your Production DB>",
user: "username",
password: "password",
},
pool: {
min: 2,
max: 10,
},
migrations: {
tableName: "knex_migrations",
},
},
};
Ваш knexfile.js
файл должен выглядеть как фрагмент кода выше. Вы можете изменить код, чтобы он соответствовал любым другим требованиям проекта, которые могут у вас возникнуть.
Теперь запустите приведенную ниже команду, чтобы создать файл миграции для пользовательской таблицы и определить, как будет выглядеть таблица, выполнив приведенную ниже команду.
knex migrate:make users
Приведенная выше команда создаст migrations/timestamp_users
файл в корневом каталоге вашего проекта. Теперь давайте определим схему в функциях ups и down.
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.up = function (knex) {
return knex.schema.createTable("users", (table) => {
table.increments("id").primary();
table.string("name").notNullable();
table.string("email").notNullable();
table.string("password").notNullable();
table.string("avatar").defaultTo("https://i.imgur.com/Xq2bZCY.png");
table.string("bio").defaultTo("I am a new user");
table.timestamp("created_at").defaultTo(knex.fn.now());
table.timestamp("updated_at").defaultTo(knex.fn.now());
});
};
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.down = function (knex) {
return knex.schema.dropTable("users");
};
Код в migrations/timestamp_users.js
файле должен выглядеть как приведенный выше фрагмент кода. Мы определили схему пользователя. Первое — это id
поле с автоинкрементом, установленным в true, и уникальным ограничением, после этого у нас есть поля, которые нам нужны для пользовательской таблицы.
Затем в down
функции мы удаляем любую существующую таблицу с именем users, прежде чем создавать нашу новую таблицу.
Чтобы создать эту таблицу в своей базе данных, вам нужно снова запустить команду миграции, на этот раз вам нужно добавить latest
флаг, чтобы зафиксировать только новые изменения в файле.
knex migrate:latest
Затем создайте схему блогов , выполнив приведенную ниже команду миграции на своем терминале.
knex migrate:make blogs
Затем добавьте приведенный ниже код в функцию up , чтобы определить схему блога.
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.up = function (knex) {
return knex.schema.createTable("blog", (table) => {
table.increments("id").primary();
table.string("title").notNullable();
table.string("content").notNullable();
table.string("image").notNullable();
table.timestamp("created_at").defaultTo(knex.fn.now());
table.timestamp("updated_at").defaultTo(knex.fn.now());
});
};
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.down = function (knex) {
return knex.schema.dropTable("blog");
};
В приведенном выше фрагменте кода мы создали схему блога и определили необходимые поля в таблице блогов. Мы также удаляем все существующие таблицы с именем blogs .
Теперь давайте создадим связь между схемой пользователя и схемой блога. Таким образом, мы можем связать блоги с пользователями, которые их создают. Для этого нам нужно обновить код в timestamps_blogs.js
файле следующим кодом:
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.up = function (knex) {
return knex.schema.createTable("blog", (table) => {
table.increments("id").primary();
table.string("title").notNullable();
table.string("content").notNullable();
table.string("image").notNullable();
table
.integer("author")
.unsigned()
.references("id")
.inTable("users")
.onDelete("CASCADE");
table.timestamp("created_at").defaultTo(knex.fn.now());
table.timestamp("updated_at").defaultTo(knex.fn.now());
});
};
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.down = function (knex) {
return knex.schema.dropTable("blog");
};
В приведенном выше фрагменте кода мы изменили поле автора, чтобы оно ссылалось на идентификатор каждого пользователя в пользовательской схеме. OnDelete
Завещание гарантирует удаление блога после удаления учетной записи пользователя .
Затем создайте db.js
файл в папке конфигурации и добавьте приведенный ниже фрагмент кода.
const knex = require("knex");
const config = require("../../knexfile");
module.exports = knex(config.development);
В приведенном выше фрагменте кода мы импортируем config
и knexfile
инициализируем объект knex, поэтому после запуска приложения в среде разработки мы будем вызывать development
объект конфигурации.
Создав наши таблицы базы данных, давайте создадим службу, которая выполняет операции CRUD в таблицах базы данных. Создайте userService.js
файл в service
папке и добавьте фрагмент кода, указанный ниже.
const db = require('../config/db');
module.exports = userService = {
getAll: async () => {
const users = await db("users");
return users;
},
getById: async (id) => {
const user = await db("users").where("id", id);
return user;
},
create: async (user) => {
const users = await db("users").insert(user);
return users;
},
update: async (id, user) => {
const users = await db("users").where("id", id).update({
name: user.name,
email: user.email,
password: user.password,
avatar: user.avatar,
bio: user.bio,
});
return users;
},
delete: async (id) => {
const users = await db("users").where("id", id).del();
return users;
},
};
В приведенном выше фрагменте кода мы импортировали конфигурацию knex. Затем мы создали userService
объект и создали методы для операций CRUD.
Затем создайте blogService.js
файл в папке службы и добавьте приведенный ниже фрагмент кода.
const db = require("../config/db");
module.exports = blogService = {
getAll: async () => {
const blogs = await db("blog")
.join("users", "users.id", "blog.author")
.select(
"blog.*",
"users.name",
"users.avatar",
"users.bio",
"users.email"
);
return blogs;
},
getById: async (id) => {
console.log(id);
const blog = await db("blog").where({ id });
return blog;
},
create: async (blog) => {
const blogs = await db("blog").insert(blog);
return blogs;
},
update: async (id, blog) => {
const blogs = await db("blog").where("id", id).update({
title: blog.title,
content: blog.content,
image: blog.image,
});
return blogs;
},
delete: async (id) => {
const blogs = await db("blogs").where("id", id).del();
return blogs;
},
};
В приведенном выше фрагменте кода мы создали операции CRUD для сервиса blogService. В getAll
методе мы соединяем users
таблицу с blogs
таблицей, используя метод select для select
полей, которые мы хотим показать пользователям — если мы сейчас вызовем службу, мы сможем получить блоги и пользователей, которые их опубликовали.
Теперь давайте создадим контроллер для использования только что созданной службы. Начнем с контроллера пользователя. Поэтому создайте userController.js
файл в папке контроллера и добавьте приведенный ниже фрагмент кода.
const userService = require("../service/userService");
module.exports = userController = {
getAll: async (req, res, next) => {
try {
const users = await userService.getAll();
res.json(users);
} catch (error) {
next(error);
}
},
getById: async (req, res, next) => {
try {
const user = await userService.getById(req.params.id);
res.json(user);
} catch (error) {
next(error);
}
},
create: async (req, res, next) => {
try {
const user = await userService.create(req.body);
res.json(user);
} catch (error) {
next(error);
}
},
update: async (req, res, next) => {
try {
const user = await userService.update(req.params.id, req.body);
res.json(user);
} catch (error) {
next(error);
}
},
delete: async (req, res, next) => {
try {
const user = await userService.delete(req.params.id);
res.json(user);
} catch (error) {
next(error);
}
},
};
Теперь создайте blogController.js
файл в папке контроллераblogService
, чтобы использовать фрагмент кода ниже.
const userService = require("../service/userService");
module.exports = userController = {
getAll: async (req, res, next) => {
try {
const users = await userService.getAll();
res.json(users);
} catch (error) {
next(error);
}
},
getById: async (req, res, next) => {
try {
const user = await userService.getById(req.params.id);
res.json(user);
} catch (error) {
next(error);
}
},
create: async (req, res, next) => {
try {
const user = await userService.create(req.body);
res.json(user);
} catch (error) {
next(error);
}
},
update: async (req, res, next) => {
try {
const user = await userService.update(req.params.id, req.body);
res.json(user);
} catch (error) {
next(error);
}
},
delete: async (req, res, next) => {
try {
const user = await userService.delete(req.params.id);
res.json(user);
} catch (error) {
next(error);
}
},
};
Далее создадим маршруты API для контроллеров . Для начала создайте user.js
файл в routes
папке и добавьте приведенный ниже фрагмент кода.
const express = require("express");
const router = express.Router();
const userController = require("../controller/userController");
/* GET users listing. */
router.route("/").get(userController.getAll).post(userController.create);
router
.route("/:id")
.get(userController.getById)
.put(userController.update)
.delete(userController.delete);
module.exports = router;
В приведенном выше фрагменте кода мы импортировали userController
и создали экспресс-маршрутизатор. Используя экспресс-маршрутизатор, мы определяем обработчики маршрутов для контроллеров.
Теперь создайте еще один файл с именем blog.js
в папке маршрутов, чтобы определить обработчики маршрутов для контроллера блога с помощью приведенного ниже фрагмента кода.
const express = require("express");
const router = express.Router();
const blogController = require("../controller/blogController");
/* GET home page. */
router.route("/").get(blogController.getAll).post(blogController.create);
router
.route("/:id")
.get(blogController.getById)
.put(blogController.update)
.delete(blogController.delete);
module.exports = router;
Наконец, импортируйте маршруты в файл app.js и создайте промежуточное ПО для обоих маршрутов с помощью приведенного ниже фрагмента кода.
...
const userRouter = require("./routes/users");
const blogRouter = require("./routes/blog");
...
app.use('/users', userRouter);
app.use('/blog', blogRouter);\
...
Теперь давайте проверим проект, чтобы убедиться, что все работает как положено. Сначала запустите свой сервер с помощью приведенной ниже команды.
npm start
Затем запустите Postman или любой инструмент тестирования API по вашему выбору.
Отправьте запрос POST на конечную точку localhost:3000/users
с приведенными ниже полезными данными, чтобы создать пользователя.
{
"name":"name",
"email":"name@gmail.com",
"password":"1234",
"bio":"I am a software dev."
}
Тестирование конечной точки пользователя — результаты
Затем отправьте запрос GET на ту же конечную точку, чтобы получить всех зарегистрированных пользователей. Идите вперед и протестируйте конечные точки других пользователей.
Получение всех зарегистрированных пользователей - результаты
Теперь отправьте запрос POST на конечную точку localhost:3000/blog
с полезной нагрузкой ниже, чтобы создать блог для пользователя с идентификатором 1, обозначенным полем автора .
{
"title":"My First Blog",
"content":"Blah Blah Blah",
"image":"Image URL",
"author":"1"
}
Тестирование конечной точки блога — запрос POST
Затем отправьте запрос GET на ту же конечную точку, чтобы получить все блоги.
Тестирование конечной точки блога — запрос GET
Теперь мы успешно создали наше приложение Blog. Теперь давайте посмотрим на данные пользователей с помощью Arctype. Для начала запустите Arctype, перейдите на Postgres
вкладку и введите следующие Postgres
учетные данные, как показано на скриншоте ниже (все то же самое, что мы делали с MySQL в начале):
Вы должны увидеть таблицу user , blog и таблицы миграции knex, в которых хранятся записи о миграциях, выполненных в приложении. Теперь нажмите на таблицу блогов, чтобы отобразить блоги пользователя, как показано на снимке экрана ниже:
Данные PostgreSQL в Arctype
Создав демонстрационный проект, мы узнали, как создавать конечные точки REST с помощью Knex и PostgreSQL. Мы начали с того, что представили PostgreSQL и Knex и рассказали, почему вы должны их использовать, а затем создали проект блога для демонстрации. Теперь, когда вы получили необходимые знания, как бы вы использовали построитель запросов в своем следующем проекте? Подумайте о том, чтобы узнать больше о Knex на их официальном сайте и пойти еще дальше!
Ссылка: https://arctype.com/blog/postgresql-rest-api-knex/
#restapi #api #postgresql #knex
1652251528
Opencart REST API extensions - V3.x | Rest API Integration : OpenCart APIs is fully integrated with the OpenCart REST API. This is interact with your OpenCart site by sending and receiving data as JSON (JavaScript Object Notation) objects. Using the OpenCart REST API you can register the customers and purchasing the products and it provides data access to the content of OpenCart users like which is publicly accessible via the REST API. This APIs also provide the E-commerce Mobile Apps.
Opencart REST API
OCRESTAPI Module allows the customer purchasing product from the website it just like E-commerce APIs its also available mobile version APIs.
Opencart Rest APIs List
Customer Registration GET APIs.
Customer Registration POST APIs.
Customer Login GET APIs.
Customer Login POST APIs.
Checkout Confirm GET APIs.
Checkout Confirm POST APIs.
If you want to know Opencart REST API Any information, you can contact us at -
Skype: jks0586,
Email: letscmsdev@gmail.com,
Website: www.letscms.com, www.mlmtrees.com
Call/WhatsApp/WeChat: +91–9717478599.
Download : https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=43174&filter_search=ocrest%20api
View Documentation : https://www.letscms.com/documents/api/opencart-rest-api.html
More Information : https://www.letscms.com/blog/Rest-API-Opencart
VEDIO : https://vimeo.com/682154292
#opencart_api_for_android #Opencart_rest_admin_api #opencart_rest_api #Rest_API_Integration #oc_rest_api #rest_api_ecommerce #rest_api_mobile #rest_api_opencart #rest_api_github #rest_api_documentation #opencart_rest_admin_api #rest_api_for_opencart_mobile_app #opencart_shopping_cart_rest_api #opencart_json_api
1660285817
В этом блоге мы расскажем вам, как создавать службы на основе REST с использованием Knex и PostgreSQL.
Knex — это универсальный, портативный и приятный конструктор SQL-запросов для PostgreSQL, CockroachDB, MSSQL, MySQL, MariaDB, SQLite3, Better-SQLite3, Oracle и Amazon Redshift, а PostgreSQL — это система управления объектно-реляционными базами данных с открытым исходным кодом с высокая степень гибкости. Он способен обрабатывать широкий спектр вариантов использования, включая отдельные машины, хранилища данных и веб-сервисы с несколькими одновременными пользователями. Это система управления реляционной базой данных, которая использует и расширяет SQL (отсюда и название) и широко расширяема для различных вариантов использования, помимо транзакционных данных.
PostgreSQL хранит информацию в таблицах (называемых отношениями), которые содержат кортежи, представляющие сущности (например, документы и людей) и отношения (например, авторство). Атрибуты фиксированного типа, которые представляют свойства объекта (например, заголовок), а также первичный ключ, включаются в отношения. Типы атрибутов могут быть атомарными (например, целым числом, с плавающей запятой или логическим значением) или структурированными (например, массивом, вложенным JSON или процедурой).
Большинство разработчиков используют Knex в качестве построителя запросов по следующим причинам.
Поскольку это практическое демонстрационное руководство, для начала убедитесь, что ваши системы соответствуют следующим требованиям:
npm i -g knex
)Выполнив вышеуказанные требования, давайте создадим новую базу данных с помощью Arctype. Для начала запустите клиент Arctype , затем выберите базу данных, с которой вы хотите работать:
Выбор СУБД в Arctype
Затем укажите учетные данные соответствующей базы данных. Здесь все очень просто, никаких хлопот!
Определение учетных данных базы данных
Если у вас уже настроена база данных, вы всегда можете создать новую, добавив новый источник данных:
Добавление нового источника данных в Arctype
После того, как вы закончите, вы должны увидеть таблицы под вашей базой данных с левой стороны в Arctype.
Теперь создайте новую папку для своего проекта и инициализируйте новый проект с помощью приведенных ниже команд.
mkdir knex-demo && cd knex-demo
npm init -y
Затем установите необходимые пакеты, выполнив следующую команду:
npm install pg express knex
С помощью приведенной выше команды вы установили модуль PostgreSQL Node.js express
, и knex
модуль.
Теперь создайте следующую структуру папок ниже в папке knex-demo.
📦knex-demo
┣ 📂src
┃ ┣ 📂config
┃ ┣ 📂controller
┃ ┣ 📂routes
┃ ┣ 📂service
┃ ┗ 📜app.js
┣ 📜package-lock.json
┗ 📜package.json
Затем в app.js
файле создайте сервер Node.js Express с приведенным ниже фрагментом кода.
const express = require("express");
const app = express();
app.use(express.json());
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
Наконец, измените package.json
файл, чтобы добавить команду сценария.
"scripts": {
"start": "node src/app.js"
},
После того, как вы создали базу данных, давайте настроим Knex и подключимся к базе данных. Чтобы начать, выполните приведенную ниже команду на своем терминале, чтобы инициализировать knex.
knex init
Приведенная выше команда создаст knexfile.js
файл в корневом каталоге вашего проекта с фрагментами кода для подключения вашей базы данных к различным средам (разработка, подготовка, производство). По умолчанию она использует базу данных SQLite в среде разработки, вам нужно изменить код для использования вашей базы данных Postgres.
// Update with your config settings.
/**
* @type { Object.<string, import("knex").Knex.Config> }
*/
module.exports = {
development: {
client: "postgresql",
connection: {
database: "blogs",
user: "postgres",
password: "1234",
},
},
staging: {
client: "postgresql",
connection: {
database: "<Your Staging DB>",
user: "username",
password: "password",
},
pool: {
min: 2,
max: 10,
},
migrations: {
tableName: "knex_migrations",
},
},
production: {
client: "postgresql",
connection: {
database: "<Your Production DB>",
user: "username",
password: "password",
},
pool: {
min: 2,
max: 10,
},
migrations: {
tableName: "knex_migrations",
},
},
};
Ваш knexfile.js
файл должен выглядеть как фрагмент кода выше. Вы можете изменить код, чтобы он соответствовал любым другим требованиям проекта, которые могут у вас возникнуть.
Теперь запустите приведенную ниже команду, чтобы создать файл миграции для пользовательской таблицы и определить, как будет выглядеть таблица, выполнив приведенную ниже команду.
knex migrate:make users
Приведенная выше команда создаст migrations/timestamp_users
файл в корневом каталоге вашего проекта. Теперь давайте определим схему в функциях ups и down.
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.up = function (knex) {
return knex.schema.createTable("users", (table) => {
table.increments("id").primary();
table.string("name").notNullable();
table.string("email").notNullable();
table.string("password").notNullable();
table.string("avatar").defaultTo("https://i.imgur.com/Xq2bZCY.png");
table.string("bio").defaultTo("I am a new user");
table.timestamp("created_at").defaultTo(knex.fn.now());
table.timestamp("updated_at").defaultTo(knex.fn.now());
});
};
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.down = function (knex) {
return knex.schema.dropTable("users");
};
Код в migrations/timestamp_users.js
файле должен выглядеть как приведенный выше фрагмент кода. Мы определили схему пользователя. Первое — это id
поле с автоинкрементом, установленным в true, и уникальным ограничением, после этого у нас есть поля, которые нам нужны для пользовательской таблицы.
Затем в down
функции мы удаляем любую существующую таблицу с именем users, прежде чем создавать нашу новую таблицу.
Чтобы создать эту таблицу в своей базе данных, вам нужно снова запустить команду миграции, на этот раз вам нужно добавить latest
флаг, чтобы зафиксировать только новые изменения в файле.
knex migrate:latest
Затем создайте схему блогов , выполнив приведенную ниже команду миграции на своем терминале.
knex migrate:make blogs
Затем добавьте приведенный ниже код в функцию up , чтобы определить схему блога.
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.up = function (knex) {
return knex.schema.createTable("blog", (table) => {
table.increments("id").primary();
table.string("title").notNullable();
table.string("content").notNullable();
table.string("image").notNullable();
table.timestamp("created_at").defaultTo(knex.fn.now());
table.timestamp("updated_at").defaultTo(knex.fn.now());
});
};
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.down = function (knex) {
return knex.schema.dropTable("blog");
};
В приведенном выше фрагменте кода мы создали схему блога и определили необходимые поля в таблице блогов. Мы также удаляем все существующие таблицы с именем blogs .
Теперь давайте создадим связь между схемой пользователя и схемой блога. Таким образом, мы можем связать блоги с пользователями, которые их создают. Для этого нам нужно обновить код в timestamps_blogs.js
файле следующим кодом:
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.up = function (knex) {
return knex.schema.createTable("blog", (table) => {
table.increments("id").primary();
table.string("title").notNullable();
table.string("content").notNullable();
table.string("image").notNullable();
table
.integer("author")
.unsigned()
.references("id")
.inTable("users")
.onDelete("CASCADE");
table.timestamp("created_at").defaultTo(knex.fn.now());
table.timestamp("updated_at").defaultTo(knex.fn.now());
});
};
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.down = function (knex) {
return knex.schema.dropTable("blog");
};
В приведенном выше фрагменте кода мы изменили поле автора, чтобы оно ссылалось на идентификатор каждого пользователя в пользовательской схеме. OnDelete
Завещание гарантирует удаление блога после удаления учетной записи пользователя .
Затем создайте db.js
файл в папке конфигурации и добавьте приведенный ниже фрагмент кода.
const knex = require("knex");
const config = require("../../knexfile");
module.exports = knex(config.development);
В приведенном выше фрагменте кода мы импортируем config
и knexfile
инициализируем объект knex, поэтому после запуска приложения в среде разработки мы будем вызывать development
объект конфигурации.
Создав наши таблицы базы данных, давайте создадим службу, которая выполняет операции CRUD в таблицах базы данных. Создайте userService.js
файл в service
папке и добавьте фрагмент кода, указанный ниже.
const db = require('../config/db');
module.exports = userService = {
getAll: async () => {
const users = await db("users");
return users;
},
getById: async (id) => {
const user = await db("users").where("id", id);
return user;
},
create: async (user) => {
const users = await db("users").insert(user);
return users;
},
update: async (id, user) => {
const users = await db("users").where("id", id).update({
name: user.name,
email: user.email,
password: user.password,
avatar: user.avatar,
bio: user.bio,
});
return users;
},
delete: async (id) => {
const users = await db("users").where("id", id).del();
return users;
},
};
В приведенном выше фрагменте кода мы импортировали конфигурацию knex. Затем мы создали userService
объект и создали методы для операций CRUD.
Затем создайте blogService.js
файл в папке службы и добавьте приведенный ниже фрагмент кода.
const db = require("../config/db");
module.exports = blogService = {
getAll: async () => {
const blogs = await db("blog")
.join("users", "users.id", "blog.author")
.select(
"blog.*",
"users.name",
"users.avatar",
"users.bio",
"users.email"
);
return blogs;
},
getById: async (id) => {
console.log(id);
const blog = await db("blog").where({ id });
return blog;
},
create: async (blog) => {
const blogs = await db("blog").insert(blog);
return blogs;
},
update: async (id, blog) => {
const blogs = await db("blog").where("id", id).update({
title: blog.title,
content: blog.content,
image: blog.image,
});
return blogs;
},
delete: async (id) => {
const blogs = await db("blogs").where("id", id).del();
return blogs;
},
};
В приведенном выше фрагменте кода мы создали операции CRUD для сервиса blogService. В getAll
методе мы соединяем users
таблицу с blogs
таблицей, используя метод select для select
полей, которые мы хотим показать пользователям — если мы сейчас вызовем службу, мы сможем получить блоги и пользователей, которые их опубликовали.
Теперь давайте создадим контроллер для использования только что созданной службы. Начнем с контроллера пользователя. Поэтому создайте userController.js
файл в папке контроллера и добавьте приведенный ниже фрагмент кода.
const userService = require("../service/userService");
module.exports = userController = {
getAll: async (req, res, next) => {
try {
const users = await userService.getAll();
res.json(users);
} catch (error) {
next(error);
}
},
getById: async (req, res, next) => {
try {
const user = await userService.getById(req.params.id);
res.json(user);
} catch (error) {
next(error);
}
},
create: async (req, res, next) => {
try {
const user = await userService.create(req.body);
res.json(user);
} catch (error) {
next(error);
}
},
update: async (req, res, next) => {
try {
const user = await userService.update(req.params.id, req.body);
res.json(user);
} catch (error) {
next(error);
}
},
delete: async (req, res, next) => {
try {
const user = await userService.delete(req.params.id);
res.json(user);
} catch (error) {
next(error);
}
},
};
Теперь создайте blogController.js
файл в папке контроллераblogService
, чтобы использовать фрагмент кода ниже.
const userService = require("../service/userService");
module.exports = userController = {
getAll: async (req, res, next) => {
try {
const users = await userService.getAll();
res.json(users);
} catch (error) {
next(error);
}
},
getById: async (req, res, next) => {
try {
const user = await userService.getById(req.params.id);
res.json(user);
} catch (error) {
next(error);
}
},
create: async (req, res, next) => {
try {
const user = await userService.create(req.body);
res.json(user);
} catch (error) {
next(error);
}
},
update: async (req, res, next) => {
try {
const user = await userService.update(req.params.id, req.body);
res.json(user);
} catch (error) {
next(error);
}
},
delete: async (req, res, next) => {
try {
const user = await userService.delete(req.params.id);
res.json(user);
} catch (error) {
next(error);
}
},
};
Далее создадим маршруты API для контроллеров . Для начала создайте user.js
файл в routes
папке и добавьте приведенный ниже фрагмент кода.
const express = require("express");
const router = express.Router();
const userController = require("../controller/userController");
/* GET users listing. */
router.route("/").get(userController.getAll).post(userController.create);
router
.route("/:id")
.get(userController.getById)
.put(userController.update)
.delete(userController.delete);
module.exports = router;
В приведенном выше фрагменте кода мы импортировали userController
и создали экспресс-маршрутизатор. Используя экспресс-маршрутизатор, мы определяем обработчики маршрутов для контроллеров.
Теперь создайте еще один файл с именем blog.js
в папке маршрутов, чтобы определить обработчики маршрутов для контроллера блога с помощью приведенного ниже фрагмента кода.
const express = require("express");
const router = express.Router();
const blogController = require("../controller/blogController");
/* GET home page. */
router.route("/").get(blogController.getAll).post(blogController.create);
router
.route("/:id")
.get(blogController.getById)
.put(blogController.update)
.delete(blogController.delete);
module.exports = router;
Наконец, импортируйте маршруты в файл app.js и создайте промежуточное ПО для обоих маршрутов с помощью приведенного ниже фрагмента кода.
...
const userRouter = require("./routes/users");
const blogRouter = require("./routes/blog");
...
app.use('/users', userRouter);
app.use('/blog', blogRouter);\
...
Теперь давайте проверим проект, чтобы убедиться, что все работает как положено. Сначала запустите свой сервер с помощью приведенной ниже команды.
npm start
Затем запустите Postman или любой инструмент тестирования API по вашему выбору.
Отправьте запрос POST на конечную точку localhost:3000/users
с приведенными ниже полезными данными, чтобы создать пользователя.
{
"name":"name",
"email":"name@gmail.com",
"password":"1234",
"bio":"I am a software dev."
}
Тестирование конечной точки пользователя — результаты
Затем отправьте запрос GET на ту же конечную точку, чтобы получить всех зарегистрированных пользователей. Идите вперед и протестируйте конечные точки других пользователей.
Получение всех зарегистрированных пользователей - результаты
Теперь отправьте запрос POST на конечную точку localhost:3000/blog
с полезной нагрузкой ниже, чтобы создать блог для пользователя с идентификатором 1, обозначенным полем автора .
{
"title":"My First Blog",
"content":"Blah Blah Blah",
"image":"Image URL",
"author":"1"
}
Тестирование конечной точки блога — запрос POST
Затем отправьте запрос GET на ту же конечную точку, чтобы получить все блоги.
Тестирование конечной точки блога — запрос GET
Теперь мы успешно создали наше приложение Blog. Теперь давайте посмотрим на данные пользователей с помощью Arctype. Для начала запустите Arctype, перейдите на Postgres
вкладку и введите следующие Postgres
учетные данные, как показано на скриншоте ниже (все то же самое, что мы делали с MySQL в начале):
Вы должны увидеть таблицу user , blog и таблицы миграции knex, в которых хранятся записи о миграциях, выполненных в приложении. Теперь нажмите на таблицу блогов, чтобы отобразить блоги пользователя, как показано на снимке экрана ниже:
Данные PostgreSQL в Arctype
Создав демонстрационный проект, мы узнали, как создавать конечные точки REST с помощью Knex и PostgreSQL. Мы начали с того, что представили PostgreSQL и Knex и рассказали, почему вы должны их использовать, а затем создали проект блога для демонстрации. Теперь, когда вы получили необходимые знания, как бы вы использовали построитель запросов в своем следующем проекте? Подумайте о том, чтобы узнать больше о Knex на их официальном сайте и пойти еще дальше!
Ссылка: https://arctype.com/blog/postgresql-rest-api-knex/
#restapi #api #postgresql #knex
1652251629
Unilevel MLM Wordpress Rest API FrontEnd | UMW Rest API Woocommerce Price USA, Philippines : Our API’s handle the Unilevel MLM woo-commerce end user all functionalities like customer login/register. You can request any type of information which is listed below, our API will provide you managed results for your all frontend needs, which will be useful for your applications like Mobile App etc.
Business to Customer REST API for Unilevel MLM Woo-Commerce will empower your Woo-commerce site with the most powerful Unilevel MLM Woo-Commerce REST API, you will be able to get and send data to your marketplace from other mobile apps or websites using HTTP Rest API request.
Our plugin is used JWT authentication for the authorization process.
REST API Unilevel MLM Woo-commerce plugin contains following APIs.
User Login Rest API
User Register Rest API
User Join Rest API
Get User info Rest API
Get Affiliate URL Rest API
Get Downlines list Rest API
Get Bank Details Rest API
Save Bank Details Rest API
Get Genealogy JSON Rest API
Get Total Earning Rest API
Get Current Balance Rest API
Get Payout Details Rest API
Get Payout List Rest API
Get Commissions List Rest API
Withdrawal Request Rest API
Get Withdrawal List Rest API
If you want to know more information and any queries regarding Unilevel MLM Rest API Woocommerce WordPress Plugin, you can contact our experts through
Skype: jks0586,
Mail: letscmsdev@gmail.com,
Website: www.letscms.com, www.mlmtrees.com,
Call/WhatsApp/WeChat: +91-9717478599.
more information : https://www.mlmtrees.com/product/unilevel-mlm-woocommerce-rest-api-addon
Visit Documentation : https://letscms.com/documents/umw_apis/umw-apis-addon-documentation.html
#Unilevel_MLM_WooCommerce_Rest_API's_Addon #umw_mlm_rest_api #rest_api_woocommerce_unilevel #rest_api_in_woocommerce #rest_api_woocommerce #rest_api_woocommerce_documentation #rest_api_woocommerce_php #api_rest_de_woocommerce #woocommerce_rest_api_in_android #woocommerce_rest_api_in_wordpress #Rest_API_Woocommerce_unilevel_mlm #wp_rest_api_woocommerce
1652251974
B2C Custom Policy with REST API | Business to Customer Rest API Price USA, Philippines : Business to Customer REST API for Woo-Commerce will empower your Woo-commerce site with the most powerful Woo-Commerce REST API, you will be able to get and send data to your marketplace from other mobile apps or websites using HTTP Rest API request.
Our API’s handle the woo-commerce frontend all functionalities like customer login/register. You can request for any type of information which is listed below, our API will provide you managed results for your all frontend needs, which will be useful for your applications like Mobile App etc.
Our plugin is used JWT authentication to authorization process.
If you want to know more information and any queries regarding Business to Customer Rest API Woocommerce WordPress Plugin, you can contact our experts through.
Skype: jks0586,
Email: letscmsdev@gmail.com,
Website: www.letscms.com, www.mlmtrees.com,
Call/WhatsApp/WeChat: +91-9717478599.
more information : https://www.mlmtrees.com/product/woocommerce-b2c-rest-api
Vedio : https://www-ccv.adobe.io/v1/player/ccv/Uxr7n4K9GQW/embed?api_key=behance1&bgcolor=%23191919
#b2c_rest_api #rest_api #rest_api_Woocommerce #Genealogy #Rest_API #Restful_API #Rest_API_Plugin #b2c #business_to_customer_api #Frontend_for_REST_API #b2c_rest_api #woocommerce_api #woo_rest_api #wp_rest_api #WordPress_rest_api #lets_woo_apis_is_fully_integrated
1594289280
The REST acronym is defined as a “REpresentational State Transfer” and is designed to take advantage of existing HTTP protocols when used for Web APIs. It is very flexible in that it is not tied to resources or methods and has the ability to handle different calls and data formats. Because REST API is not constrained to an XML format like SOAP, it can return multiple other formats depending on what is needed. If a service adheres to this style, it is considered a “RESTful” application. REST allows components to access and manage functions within another application.
REST was initially defined in a dissertation by Roy Fielding’s twenty years ago. He proposed these standards as an alternative to SOAP (The Simple Object Access Protocol is a simple standard for accessing objects and exchanging structured messages within a distributed computing environment). REST (or RESTful) defines the general rules used to regulate the interactions between web apps utilizing the HTTP protocol for CRUD (create, retrieve, update, delete) operations.
An API (or Application Programming Interface) provides a method of interaction between two systems.
A RESTful API (or application program interface) uses HTTP requests to GET, PUT, POST, and DELETE data following the REST standards. This allows two pieces of software to communicate with each other. In essence, REST API is a set of remote calls using standard methods to return data in a specific format.
The systems that interact in this manner can be very different. Each app may use a unique programming language, operating system, database, etc. So, how do we create a system that can easily communicate and understand other apps?? This is where the Rest API is used as an interaction system.
When using a RESTful API, we should determine in advance what resources we want to expose to the outside world. Typically, the RESTful API service is implemented, keeping the following ideas in mind:
The features of the REST API design style state:
For REST to fit this model, we must adhere to the following rules:
#tutorials #api #application #application programming interface #crud #http #json #programming #protocols #representational state transfer #rest #rest api #rest api graphql #rest api json #rest api xml #restful #soap #xml #yaml