Рубрики
Без рубрики

Deno Rest API Simple Rest API с DENO

После 2 лет своего первого выпуска Deno v1.0 наконец -то здесь. Итак, что такое Дено в любом случае? … Tagged с Deno, TypeScript, JavaScript.

После 2 лет своего первого выпуска Deno v1.0 наконец -то здесь.

Итак, что такое Дено в любом случае?

DENO – это простое, современное и безопасное время выполнения для JavaScript и TypeScript, которая использует V8 и встроен в Rust. Официальный сайт Дено

Райан Даль, оригинальный создатель Node.js (популярное время выполнения JavaScript на стороне сервера) объявил DENO на JSCONF EU 2018 на его разговоре Под названием «10 вещей, о которых я сожалею о node.js» (из названия вы можете увидеть, куда мы идем). Другим словом, если вы знакомы с Node.js, то Deno такой. За исключением того, что он улучшается во многих отношениях, он создан снизу вверх, чтобы быть лучшей реализацией Node.js.

Простое сравнение с node.js

Поскольку Deno и Node.js служат той же цели, можно сравнить два напрямую.

V8 V8 Двигатель
Rust & TypeScript C ++ и JavaScript Написано в
использует URL Менеджеры пакетов: NPM Управление пакетом
ES -модули Синтаксис CommonJS Импорт пакетов
разрешенный доступ полный доступ Безопасность
встроенный не встроен Поддержка TypeScript

Учебник Дено

Давайте немного поиграем с Дено.

Установка Дено

Чтобы установить Deno, просто скопируйте и вставьте эту командную строку в свой терминал.

curl -fsSL https://deno.land/x/install/install.sh | sh

Для получения дополнительной информации проверьте Официальное руководство по установке Дено.

Когда это будет сделано, у вас будет доступ к Дено командование

Вы можете запустить дено -Хельп Чтобы получить список вариантов и подкомандов, предоставленных Deno, и вы можете запустить deno --помощь Чтобы получить дополнительную информацию, например, подкоманду: Deno Run -Help

Теперь вы можете запустить дено или дено Repl Чтобы открыть Repl (read-excute-print-петля) и начать печатать немного JavaScript

$ deno repl
Deno 1.0.0
exit using ctrl+d or close()
> console.log("Hello World !")
Hello World !

В то время (в зависимости от того, когда вы читаете это) на 14 мая 2020 г. Реплика поддерживает только JavaScript:

Есть много вещей, которые мы можем сделать, чтобы улучшить реплику, не представляя компилятора TS. Сначала мы должны делать эти вещи (например, улучшить осмотр, завершение вкладки). Как только мы находимся наравне с репликой узла, мы можем начать изучать, как выходить за рамки этого, используя TypeScript. Комментарий Райана Дала о поддержке TypeScript в Repl

Запустите приложение DEDO

Используйте deno запустить <входная точка> Команда запустить приложение DEDO.

Точка входа может быть .js Файл, .ts Файл или даже URL, который указывает на точку записи приложения, а Deno загрузит, компилируется, а затем запустите его для вас:

Например: Deno Run https://deno.land/std/examples/welcome.ts

$ deno run https://deno.land/std/examples/welcome.ts
Download https://deno.land/std/examples/welcome.ts
Compile https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕

Если вы запустите программу снова, она будет скомпилирована непосредственно, ее не нужно снова загружать, теперь она кэшируется Deno:

$ deno run https://deno.land/std/examples/welcome.ts
Compile https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕

Вы можете принудить перезагрузку исходного источника с помощью -переоценивать флаг

Deno Run -https://deno.land/std/std/examples/welcome.ts

И если вы откроете https://deno.land/std/examples/welcome.ts URL с браузером, вы получите страницу, которая содержит код и его документацию.

Веб -сайт DENO приведет другие примеры в Примеры страницы .

Давайте построим простой API REST

Мы собираемся использовать дуб каркас и TypeScript (вы также можете использовать JavaScript, если хотите)

Начнем с создания app.ts Файл, который импортирует Приложение от https://deno.land/x/oak/mod.ts и маршрутизатор от ‘./router.ts’

import { Application } from 'https://deno.land/x/oak/mod.ts'
import router from './routes.ts'

Тогда нам нужно установить переменные среды Хост и Порт

const HOST = '127.0.0.1'
const PORT = 7700

Теперь давайте создадим маршруты Импорт файла Маршрутизатор от https://deno.land/x/oak/mod.ts и создать маршруты.

import { Router }from 'https://deno.land/x/oak/mod.ts'
import { getBooks, getBook, addBook, updateBook, deleteBook } from './controller.ts'

const router = new Router()
router.get('/books', getBooks)
      .get('/books/:isbn', getBook)
      .post('/books', addBook)
      .put('/books/:isbn', updateBook)
      .delete('/books/:isbn', deleteBook)

export default router

ПРИМЕЧАНИЕ: функции GetBooks , GetBook , addbook , книга обновлений и DeleteBook импортируются из локального файла, просто мы еще не создали их.

После создания маршрутизатора давайте закончим наш app.ts добавив в него этот код,

const app = new Application()

app.use(router.routes())
app.use(router.allowedMethods())

console.log(`Listening on port ${PORT} ...`)
await app.listen(`${HOST}:${PORT}`)

Теперь давайте создадим файл controller.ts и определим интерфейс для книги IBook , затем мы объявляем первоначальный массив книжных объектов:

interface IBook {
  isbn: string;
  author: string;
  title: string;
}

let books: Array = [{
  isbn: "1",
  author: "Robin Wieruch",
  title: "The Road to React",
},{
  isbn: "2",
  author: "Kyle Simpson",
  title: "You Don't Know JS: Scope & Closures",
},{
  isbn: "3",
  author: "Andreas A. Antonopoulos",
  title: "Mastering Bitcoin",
}]

Теперь давайте реализуем функции один за другим

GetBooks: возвращает все книги в списке.

const getBooks = ({ response }: { response: any }) => { 
  response.body = books 
}

GetBook: возвращает одну книгу по своему ISBN или сообщению об ошибке, если не найдено.

const getBook = ({ params, response }: { params: { isbn: string }; response: any }) => {
  const book: IBook | undefined = searchBookByIsbn(params.isbn)
  if (book) {
    response.status = 200
    response.body = book
  } else {
    response.status = 404
    response.body = { message: `Book not found.` }
  }   
}

AddBook: добавьте книгу в список книг.

const addBook = async ({ request, response }: { request: any; response: any }) => {
  const body = await request.body()
  const book: IBook = body.value  
  books.push(book)
  response.body = { message: 'OK' }
  response.status = 200
}

Обновление: обновляет книгу, если существует, верните сообщение об ошибке, если нет.

const updateBook = async ({ params, request, response }: { params: { isbn: string }; request: any; response: any }) => {
  let book: IBook | undefined = searchBookByIsbn(params.isbn)
  if (book) {
    const body = await request.body()
    const updateInfos: { author?: string; title?: string } = body.value
    book = { ...book, ...updateInfos}
    books = [...books.filter(book => book.isbn !== params.isbn), book]
    response.status = 200
    response.body = { message: 'OK' }
  } else {
    response.status = 404
    response.body = { message: `Book not found` }
  }  
}

Deletebook: удаляет книгу из списка книг.

const deleteBook = ({ params, response }: { params: { isbn: string }; response: any }) => {
  books = books.filter(book => book.isbn !== params.isbn)
  response.body = { message: 'OK' }
  response.status = 200
}

После добавления функций в Controller.ts Нам нужно экспортировать их, чтобы мы могли использовать их в router.ts файл

/* return the book if found and undefined if not */
const searchBookByIsbn = (isbn: string): ( IBook | undefined ) => books.filter(book => book.isbn === isbn )[0]

export { getBooks, getBook, addBook, updateBook, deleteBook }

Примечание: SearchBookByisbn () Это просто вспомогательная функция.

Здесь исходный код на GitHub

Ты хочешь больше Дено?

Вот некоторые ресурсы: Официальный сайт Дено , Документация API И вы можете найти гораздо больше ресурсов, библиотек и рамок в Удивительный список Дено Анкет

Оригинал: “https://dev.to/am77/deno-v1-0-303j”