REST API с использованием Deno

В моей последней статье Deno — первый взгляд мы обсудили базовое понимание Deno. Не проверили? Просто есть один раз. Я жду здесь, чувак!

.

.

.

Законченный? Здорово. Что ж, надеюсь, теперь вы чувствуете себя комфортно и хотите узнать больше о Deno. Особенно то, как мы строим наше первое приложение. Правильно? Давайте начнем создавать простой REST API, используя DENO.

Поскольку мы создаем очень простой REST API, давайте сохраним простоту. Итак, во-первых, нам нужно запустить сервер или запустить приложение, затем для конечных точек API нам нужны маршрутизаторы и, наконец, контроллер, чтобы определить его функциональность, вот и все.
app.ts
router.ts controller.ts

Возможно, вы слышали об Express.Js в NODE. Если не беспокойтесь, это популярный веб-фреймворк. Здесь, в Deno, мы будем использовать веб-фреймворк под названием Oak, вдохновленный Koa.

Просто создайте файл app.ts и просто импортируйте приложение из https://deno.land/x/oak/mod.ts и настройте порт.

import{ Application } from 'https://deno.land/x/oak/mod.ts' 
const port = 8000 
console.log(`Wow! The server is running at port ${port}`)

Теперь выполните app.ts

deno run --allow-net app.ts

Что ж, теперь сервер готов к работе, поэтому нам нужно сосредоточиться на следующей части, а именно на части маршрутизации. Давайте создадим новый файл с именем router.ts и объявим все конечные точки маршрутизации. Увидеть ниже…

import{ Router} from'https://deno.land/x/oak/mod.ts'; 
import{ getEmployees, getEmployee,addEmployee, updateEmployee,deleteEmployee } from'./controller.ts'; 
constrouter= newRouter(); 
router. 
    get('/employees', getEmployees). 
    get('/employee/:empId', getEmployee). 
    post('/employee', addEmployee). 
    put('/employee/:empId', updateEmployee).   
    delete('/employee/:empId', deleteEmployee)

Вы можете запутаться с функциями, написанными в роутах. Вы найдете их все в controllers.ts.

Теперь вернемся к app.ts и используем роутер через импорт. См. полный код app.ts ниже.

import{ Application} from'https://deno.land/x/oak/mod.ts'; 
import router from'./router.ts'; 
const PORT = 8000; 
const app = newApplication(); 
app.use(router.routes()); 
app.use(router.allowedMethods()); 
console.log(`Wow! The server is running at port ${PORT}`) awaitapp.listen({port:PORT});

Сначала нам нужно провести интерфейс таблицы сотрудников

interfaceEmployees { 
    empId:string; 
    deptName:string; 
    designation:string; 
}

Мы можем выделить эту часть интерфейса в отдельный файл TS в качестве модели, но для простоты мы продолжим работу с этим файлом контроллера. Теперь мы инициализируем массив сотрудника.

let employees: Array<Employees>= 
[{ 
    empId:"1", 
    deptName:"Growth", 
    designation:"Sr. Developer" 
},{ 
    empId:"2", 
    deptName:"ACE", 
    designation:"Pro. Developer" 
},{ 
    empId:"3", 
    deptName:"Growth", 
    designation:"BDM" 
},{ 
    empId:"4", 
    deptName:"ACE", 
    designation:"ADM" 
},{ 
    empId:"5", 
    deptName:"Bench", 
    designation:"Trainee Developer" 
}]

И, наконец, мы создаем здесь все методы маршрутизации один за другим…

getEmployees Мы можем найти все данные о сотрудниках, просто запросив /employees

const getEmployees = ({ response}: { response: any}) => { response.body= employees }

Теперь проверьте здесь

getEmployee Мы можем получить данные обо всех сотрудниках в основной список сотрудников. Итак, мы запрашиваем метод post, и конечная точка будет /employee:id.

constgetEmployee = ({ params,response }: { params:{ empId: string}; response: any}) => { 
    constemployee: Employees| undefined =searchEmpByEmpId(params.empId) if(employee) { 
    response.status= 200 
    response.body= employee 
    }else { 
        response.status= 404 
        response.body= { message: 'Employeenot found.' } 
    } 
}

Теперь проверьте здесь

addEmployee Мы можем добавить данные любого сотрудника в основной список сотрудников. Итак, мы запрашиваем метод post, и конечная точка будет /employee.

const addEmployee = async({ request, response}: { request: any;response: any}) => { 
    const body = await request.body() 
    const employee: Employees = body.value 
    employees.push(employee) 
    response.body= { message: 'OK'} 
    response.status= 200 
}

Теперь проверьте здесь

updateEmployee Мы можем обновить данные любого сотрудника по его идентификатору. Итак, мы запрашиваем метод put, а конечной точкой будет /employee:id.

const updateEmployee = async({ params, request,response }: { params:{ empId: string}; request: any;response: any}) => { 
    let employee: Employees| undefined =searchEmpByEmpId(params.empId) if(employee) { 
        const body = await request.body() 
        const updateInfos: { deptName?:string; designation?:string } = body.value 
        employee= { ...employee, ...updateInfos} 
        employees= [...employees.filter(employee=> employee.empId!== params.empId),employee] 
        response.status= 200 
        response.body= { message: 'OK'} 
    }else { 
        response.status= 404 response.body= { message: `Employeenot found` } 
    } 
}

Теперь проверьте здесь

deleteEmployee Мы можем удалить данные любого сотрудника по его идентификатору сотрудника. Итак, мы запрашиваем метод удаления, а конечной точкой будет /employee:id.

const deleteEmployee = ({ params,response }: { params:{ empId: string}; response: any}) => { 
    employees= employees.filter(employee=> employee.empId!== params.empId) 
    response.body= { message: 'OK'} 
    response.status= 200 
}

Теперь проверьте здесь

В конце вашего controller.ts вам нужно экспортировать все методы, чтобы router.ts мог их импортировать.

export{ getEmployees, getEmployee,addEmployee, updateEmployee,deleteEmployee }

Резюме

Теперь мы рады видеть полное руководство по Deno REST API. Это полезно для вас? Если это так, пожалуйста, оставьте комментарий на [email protected] и поделитесь этой статьей как можно больше. Большое тебе спасибо!

Мы есть на Facebook, Twitter, Quora и т.д.

Кстати, хотите узнать больше о Deno? Просто ознакомьтесь с официальной документацией Deno.

Первоначально опубликовано на https://codinghub.net.