portaldacalheta.pt
  • Основен
  • Agile Talent
  • Растеж На Приходите
  • Мобилен Дизайн
  • Управление На Проекти
Back-End

Как да създам API за Secure Node.js GraphQL



В тази статия се стремим да представим кратко ръководство за това как да създадем сигурен API на Node.js GraphQL.

Някои въпроси, които могат да ви дойдат на ум, могат да бъдат:



  • Каква е целта на използването на GraphQL API?
  • Какво представлява API на GraphQL?
  • Какво е GraphQL заявка?
  • Каква е ползата от GraphQL?
  • GraphQL по-добър ли е от REST?
  • Защо използваме Node.js?

Всички те са валидни въпроси, но преди да отговорим на тях, трябва да се потопим в кратък преглед на текущото състояние на уеб разработката:



  • Почти всяко решение, което ще намерите днес, използва някакъв интерфейс за приложно програмиране (API).
  • Дори само да използвате социална мрежа, като Facebook или Instagram, пак сте свързани с интерфейс, който използва API.
  • Ако сте любопитни, ще откриете, че почти всички онлайн развлекателни услуги използват различен вид API, включително услуги като Netflix, Spotify и YouTube.

На практика във всеки сценарий ще намерите API, който не е необходимо да знаете в детайли, напр. Не е нужно да знаете как са построени и не е необходимо да използвате същата технология, която беше преди в състояние да го интегрирате във вашата собствена система. Предоставеният API ви позволява да предложите начин за комуникация между услугите в общ стандарт, който както услугата, така и клиентът могат да комуникират, без да се налага да зависи от конкретен технологичен стек.



С добре структурирания API е възможно да имате солиден, поддържаем и мащабируем API, който може да обслужва множество видове клиенти и приложения от предния край.

Това каза, какво Е API на GraphQL?

GraphQL е език за заявки за API, разработен за вътрешна употреба във Facebook и публикуван за обществено ползване през 2015 г. Той поддържа четене, писане и актуализации в реално време. Той също е с отворен код и често се сравнява с REST и други архитектури. Накратко, той се основава на:



  • Запитвания към GraphQL - Това позволява на клиента да чете и манипулира начина, по който трябва да се получат данните.
  • Мутации в GraphQL - Ето как да записвате данни на сървъра. Това е конвенцията GraphQL за това как да записвате данни в системата.

Въпреки че тази статия трябва да демонстрира прост, но все пак реален сценарий за това как да се изграждат и използват API на GraphQL, ние няма да предоставим подробно въведение в GraphQL. Причината е проста, тъй като екипът на GraphQL предоставя изчерпателна документация и изброява няколко най-добри практики в своите Въведение в GraphQL .

Какво е GraphQL заявка?

Както е описано по-горе, заявката е начинът, по който клиентът може да чете и манипулира данни от API. Можете да предадете вида на обекта и да изберете какъв вид полета искате да получите обратно. Една проста заявка би изглеждала по следния начин:



query{ users{ firstName, lastName } }

В тази заявка ние се опитваме да достигнем до всички потребители от схемата на нашите потребители, но получаваме само firstName и lastName. Резултатът от тази заявка ще бъде като например:

{ 'data': { 'users': [ { 'firstName': 'Marcos', 'lastName': 'Silva' }, { 'firstName': 'Paulo', 'lastName': 'Silva' } ] } }

Това е доста просто за използване от клиента.



Каква е целта на използването на GraphQL API?

Целта на създаването на API е възможността да има софтуер като услуга, която може да бъде интегрирана от други външни услуги. Дори ако приложението ви се консумира от един интерфейс, можете да разгледате този интерфейс като външна услуга и за това ще можете да работите в различни проекти, когато комуникацията между двете се осигурява чрез API.

как работи носимата технология

Ако работите в голям екип, той може да бъде разделен, за да се създаде екип от преден и отзад, което позволява на двамата да използват една и съща технология и да улеснят работата си. Когато създавате API, е важно да изберете по-подходящото за проекта и това, което ви приближава до желаното решение.



В тази статия ще се съсредоточим върху скелет за изграждане на API, който използва GraphQL.

GraphQL по-добър ли е от REST?

Може да е малко прикритие, но не мога да се справя: Това зависи .



GraphQL е подход, който се вписва много добре в няколко сценария. REST е архитектурен подход, който се доказва и в няколко сценария. В днешно време има тонове статии, които обясняват защо едната е по-добра от другата или защо трябва да използвате само REST вместо GraphQL. И също така, много начини, по които можете да използвате GraphQL вътрешно и все пак да поддържате крайните точки на API като REST-базирана архитектура.

Най-доброто ръководство би било да знаете предимствата на всеки подход, да анализирате решението, което създавате, да прецените колко удобно е екипът ви да работи с решението и да прецените дали ще можете да насочите екипа си да учи и да отговори ускорете бързо, преди да изберете между подходи.

Тази статия е по-скоро практическо ръководство, отколкото субективно сравнение на GraphQL и REST. В случай, че искате да прочетете подробно сравнение на двете, предлагам ви да разгледате още една от нашите статии, GraphQL срещу REST - Урок за GraphQL .

В днешната статия ще се съсредоточим върху създаването на API на GraphQL с помощта на Node.js.

Защо използваме Node.js?

GraphQL има няколко различни библиотеки, които можете да използвате. За целите на тази статия решихме да се примирим с идеята да използваме JavaScript с Node.js поради широкото им използване и факта, че Node.js позволява на разработчиците да използва познатия синтаксис отпред за разработване от страна на сървъра.

принципи на примери за модел на дизайн

Също така е полезно да сравним с нашия подход с REST-базиран API, подобен на този, който беше демонстриран в друга статия на ApeeScape Engineering Blog: Създаване на защитен REST API в Node.js . Тази статия също така представя използването на Node.js с Експрес да разработите скелетен REST API, който ще ви позволи да сравните някои разлики между тези два подхода. Node.js също е проектиран с мащабируеми мрежови приложения, глобална общност и няколко библиотеки с отворен код, които можете да намерите в npm уебсайт .

Този път ще покажем как да изградим скелетен API с GraphQL, Node.js и Express!

Ръководството за GraphQL урок

Както беше посочено по-рано, ще изградим идея за скелет за GraphQL API и ще трябва да знаете основите на Node.js и Express, преди да продължите. Наличен е изходният код на проекта, направен за този пример на GraphQL тук .

Ще обработваме два вида ресурси:

  • Потребители, за които ще се справим с основен CRUD.
  • Продукти, за което ще имаме малко подробности, за да покажем повече от силата на GraphQL.

Потребителите ще съдържат следната структура:

  • документ за самоличност
  • първо име
  • фамилия
  • електронна поща
  • парола
  • разрешение Ниво

Продуктите ще съдържат следната структура:

  • документ за самоличност
  • име
  • описание
  • цена

Що се отнася до стандарта за кодиране, ще използваме TypeScript за този проект. В изходния файл ще можете да конфигурирате всичко, за да започнете да кодирате с TypeScript.

Нека да кодираме!

На първо място, уверете се, че имате инсталирана най-новата версия на Node.js. Към момента на публикуване текущата версия е 10.15.3, според Nodejs.org .

Инициализиране на проекта

Нека започнем в нова папка, която можем да наречем node-graphql. Там можем да отворим терминал или конзола на Git CLI и да стартираме магията, като използваме следната команда: npm init.

Конфигуриране на нашите зависимости и TypeScript

За да ускорите процеса, заменете вашия package.json със следното в нашето хранилище Git трябва да съдържа всички необходими зависимости:

google dorks за данни за кредитна карта 2018 г
{ 'name': 'node-graphql', 'version': '1.0.0', 'description': '', 'main': 'dist/index.js', 'scripts': { 'tsc': 'tsc', 'start': 'npm run tsc && node ./build/app.js' }, 'author': '', 'license': 'ISC', 'dependencies': { '@types/express': '^4.16.1', '@types/express-graphql': '^0.6.2', '@types/graphql': '^14.0.7', 'express': '^4.16.4', 'express-graphql': '^0.7.1', 'graphql': '^14.1.1', 'graphql-tools': '^4.0.4' }, 'devDependencies': { 'tslint': '^5.14.0', 'typescript': '^3.3.4000' } }

С актуализирания package.json, просто натиснете терминала отново и използвайте: npm install. Той ще инсталира всички зависимости, необходими за стартиране на този GraphQL API в Node.js и Express.

Следващото парче е да конфигурираме нашия TypeScript режим. Нуждаем се от файл, наречен tsconfig.json в нашата основна папка със следното:

{ 'compilerOptions': { 'target': 'ES2016', 'module': 'commonjs', 'outDir': './build', 'strict': true, 'esModuleInterop': true } }

Логиката на кода за тази конфигурация ще присъства в папката на приложението. Там можем да създадем app.ts файл и за основно тестване добавете следния код там:

console.log('Hello Graphql Node API tutorial');

По нашата конфигурация вече можем да стартираме npm start и изчакайте компилация и ще можете да тествате дали всичко работи правилно. Във вашата терминална конзола трябва да видите нашия „Урок за API на Graph Graph Node“. В задната сцена конфигурацията основно компилира TypeScript кода в чист JavaScript и след това изпълнява нашата компилация в build папка.

Сега нека конфигурираме основен скелет за нашия API на GraphQL. За стартиране на нашия проект ще добавим три основни вноса:

  • Експрес
  • Express-graphql
  • Graphql-инструменти

Нека започнем да сглобяваме всичко:

import express from 'express'; import graphqlHTTP from 'express-graphql'; import {makeExecutableSchema} from 'graphql-tools';

Сега трябва да можем да започнем да кодираме малко. Следващата стъпка е да се справим с нашето приложение в Express и с основната конфигурация на GraphQL като:

import express from 'express'; import graphqlHTTP from 'express-graphql'; import {makeExecutableSchema} from 'graphql-tools'; const app: express.Application = express(); const port = 3000; let typeDefs: any = [` type Query { hello: String } type Mutation { hello(message: String) : String } `]; let helloMessage: String = 'World!'; let resolvers = { Query: { hello: () => helloMessage }, Mutation: { hello: (_: any, helloData: any) => { helloMessage = helloData.message; return helloMessage; } } }; app.use( '/graphql', graphqlHTTP({ schema: makeExecutableSchema({typeDefs, resolvers}), graphiql: true }) ); app.listen(port, () => console.log(`Node Graphql API listening on port ${port}!`));

Това, което правим е:

  • Активиране на порт 3000 за нашето сървърно приложение Express.
  • Определяне кои заявки и мутации искаме да използваме като бърз пример.
  • Определяне как ще работят заявките и мутациите.

Добре, но какво се случва за typeDefs и резолвери, както и отношение към заявки и мутации?

  • typeDefs - Определението на нашата схема за това какво можем да очакваме от заявки и мутации.
  • Решители - Вместо очакването на полета или необходимите параметри, тук дефинираме функциите и поведението на това как трябва да работят заявките и мутациите.
  • Заявки - „Получаванията“, които искаме да прочетем от сървъра.
  • Мутации - Нашите искания, които ще засегнат всички данни, които имаме на собствения ни сървър.

Сега, да бягаме начало над морското равнище отново да видим какво имаме там. Очакваме, че приложението ще работи със следното съобщение: Node Graphql API слушане на порт 3000!

Вече можем да се опитаме да направим заявка и да тестваме GraphQL API на собствения си сървър чрез: http: // localhost: 3000 / graphql

Урок за GraphQL: тест на сървъра

Чудесно, сега можем да напишем първата си собствена заявка, която беше определена като „здравей“.

Урок за GraphQL: първа заявка

Имайте предвид, че начина, по който го дефинирахме на typeDefs, страницата може да ни помогне да изградим заявката.

Това е страхотно, но как можем да променим стойността? Мутации!

Сега нека видим какво се случва, когато променим стойността си в паметта с мутация:

Урок за GraphQL: демонстрация на мутация

Сега можем да правим основни CRUD операции с нашия API на GraphQL Node.js. Нека напредваме с нашия код сега.

Продукти

За продукти ще използваме модул, наречен продукти. Като опит за опростяване на тази статия ще използваме база данни в паметта само за демонстрация. Ще определим модел и услуга за управление на продукти.

react native qr код скенер

Нашият модел ще се основава, както следва:

export class Product { private id: Number = 0; private name: String = ''; private description: String = ''; private price: Number = 0; constructor(productId: Number, productName: String, productDescription: String, price: Number) { this.id = productId; this.name = productName; this.description = productDescription; this.price = price; } }

Услугата, която ще комуникира с GraphQL, ще бъде дефинирана като:

export class ProductsService { public products: any = []; configTypeDefs() { let typeDefs = ` type Product { name: String, description: String, id: Int, price: Int } `; typeDefs += ` extend type Query { products: [Product] } `; typeDefs += ` extend type Mutation { product(name:String, id:Int, description: String, price: Int): Product! }`; return typeDefs; } configResolvers(resolvers: any) { resolvers.Query.products = () => { return this.products; }; resolvers.Mutation.product = (_: any, product: any) => { this.products.push(product); return product; }; } }

Потребители

За потребителите ще следваме същата структура като модула продукти. Ще имаме модел и услуга за потребителите. Моделът ще бъде дефиниран като:

export class User { private id: Number = 0; private firstName: String = ''; private lastName: String = ''; private email: String = ''; private password: String = ''; private permissionLevel: Number = 1; constructor(id: Number, firstName: String, lastName: String, email: String, password: String, permissionLevel: Number) { this.id = id; this.firstName = firstName; this.lastName = lastName; this.email = email; this.password = password; this.permissionLevel = permissionLevel; } }

Междувременно нашата услуга ще бъде като:

const crypto = require('crypto'); export class UsersService { public users: any = []; configTypeDefs() { let typeDefs = ` type User { firstName: String, lastName: String, id: Int, password: String, permissionLevel: Int, email: String } `; typeDefs += ` extend type Query { users: [User] } `; typeDefs += ` extend type Mutation { user(firstName:String, lastName: String, password: String, permissionLevel: Int, email: String, id:Int): User! }`; return typeDefs; } configResolvers(resolvers: any) { resolvers.Query.users = () => { return this.users; }; resolvers.Mutation.user = (_: any, user: any) => { let salt = crypto.randomBytes(16).toString('base64'); let hash = crypto.createHmac('sha512', salt).update(user.password).digest('base64'); user.password = hash; this.users.push(user); return user; }; } }

За напомняне, изходният код е достъпен за използване от това връзка .

Сега можем да играем и да тестваме нашия код. Нека да стартираме npm start. Ще имаме сървъра, работещ на порт 3000. Вече имаме достъп до GraphQL за тестване на http: // localhost: 3000 / graphql .

Нека опитаме с мутация, за да добавим елемент към нашия списък с продукти:

Демонстрация на мутация на Node.js GraphQL

За да проверим дали е работило, сега ще използваме заявка за продукти, но получавайки само id, name и price:

query{ products{ id, name, price } } The response will be: { 'data': { 'products': [ { 'id': 100, 'name': 'My amazing product', 'price': 400 } ] } }

И това е; продуктът работи според очакванията. Сега можем да играем и да превключваме полетата наоколо, ако искаме. Можете да опитате да добавите описание:

query{ products{ id, name, description, price } }

Сега можем да имаме описанията на нашите продукти. Нека изпробваме потребителите сега.

mutation{ user(id:200, firstName:'Marcos', lastName:'Silva', password:'amaz1ingP4ss', permissionLevel:9, email:' [email protected] ') { id } }

И заявката ще бъде като:

query{ users{ id, firstName, lastName, password, email } }

С отговор като:

{ 'data': { 'users': [ { 'id': 200, 'firstName': 'Marcos', 'lastName': 'Silva', 'password': 'kpj6Mq0tGChGbZ+BT9Nw6RMCLReZEPPyBCaUS3X23lZwCCp1Ogb94/oqJlya0xOBdgEbUwqRSuZRjZGhCzLdeQ==', 'email': ' [email protected] ' } ] } }

И сега нашият скелет GraphQL е готов! Има много стъпки оттук към полезен, напълно функционален API, но основното ядро ​​вече е зададено.

Обобщение и заключителни мисли

Дори режещите ръбове за съкращаване, статията е доста голяма с много основна информация относно разработването на API на GraphQL Node.js.

Нека да прегледаме това, което разгледахме досега:

  • Използване на Node.js с Express и GraphQL за изграждане на API на GraphQL;
  • Основна употреба на GraphQL;
  • Основно използване на заявки и мутации;
  • Основен подход за създаване на модули за вашия проект;
  • Тестване на нашия API на GraphQL;

За да се съсредоточим повече върху развитието на нещата, ние избегнахме няколко важни елемента, които могат да бъдат обобщени накратко, както следва:

  • Проверки за нови артикули;
  • Правилно боравене с грешки с обща услуга за грешки;
  • Проверка на полета, които потребителят може да използва при всяка заявка с обща услуга;
  • Добавете JWT прехващач, за да защитите API;
  • Работете с хеша на паролата с по-ефективен подход;
  • Добавете модулни и интеграционни тестове;

Не забравяйте, че в този Git имаме пълния изходен код връзка . Чувствайте се свободни да използвате, разклонявате, отваряте издания, отправяте заявки за изтегляне и играете с него! Моля, обърнете внимание, че всички стандарти и предложения, направени в тази статия, не са издълбани в камък.

Това е само един от многото подходи, които могат да се използват, за да започнете да проектирате свой собствен GraphQL API. Също така, не забравяйте да прочетете и проучите GraphQL по-подробно, като научите какво предлага и как може да направи вашите API-та още по-добри.

Разбиране на основите

GraphQL език ли е?

GraphQL е дефиниран като език за заявки за клиентски API и време за изпълнение на сървъра за изпълнение на тези заявки. Въпреки това, GraphQL не е точно език, но има свой синтаксис и може да бъде разработен в рамките на няколко програмни езика, като Node.js.

js не е функция

Каква е ползата от GraphQL?

GraphQL опростява използването на клиента, за да прави заявки и да филтрира това, което клиентът всъщност трябва да консумира, избягвайки предаването на допълнителни данни от сървърната страна към клиентската страна. Това е добра алтернатива на REST, но може да се използва и с REST.

Какво точно е Node.js?

Node.js е среда за изпълнение на платформа на JavaScript, която ни позволява да разработваме сървъри от заден план, използвайки синтаксис на JavaScript. Той може да подобри скоростта на разработка, когато софтуерният инженер е в състояние да кодира с JavaScript, както отзад (node.js), така и отпред (като Angular или React).

Бърз ли е Node.js?

Node.js се оказа много стабилен и бърз през последните години. Той е добър за многозадачност и работи върху V8 двигателя, който се използва от Chrome.

Урок за поточно предаване на Apache Spark: Идентифициране на популярни хештегове в Twitter

Наука За Данни И Бази Данни

Урок за поточно предаване на Apache Spark: Идентифициране на популярни хештегове в Twitter
Как да изградим силна култура на отдалечена работа: Интервю с Кристи Шуман

Как да изградим силна култура на отдалечена работа: Интервю с Кристи Шуман

Хора И Екипи

Популярни Публикации
Урок за скриптове на Google Apps за овладяване на макроси
Урок за скриптове на Google Apps за овладяване на макроси
Теория на цветовете за дизайнери - Crash Course (с инфографика)
Теория на цветовете за дизайнери - Crash Course (с инфографика)
ApeeScape стартира нова специализация DevOps по заявка за обслужване на Enterprise Shift към облака
ApeeScape стартира нова специализация DevOps по заявка за обслужване на Enterprise Shift към облака
Нула до герой: Рецепти за производство на колби
Нула до герой: Рецепти за производство на колби
Как да проведем успешна техническа конференция: Събитието в CordobaJS
Как да проведем успешна техническа конференция: Събитието в CordobaJS
 
Как да накараме отдалечената работа да работи за вас
Как да накараме отдалечената работа да работи за вас
Всеки продукт има теза
Всеки продукт има теза
Комодитизирани смартфони: Привеждане на 4G в развиващите се страни
Комодитизирани смартфони: Привеждане на 4G в развиващите се страни
Запознайте се с Volt, обещаваща Ruby рамка за динамични приложения
Запознайте се с Volt, обещаваща Ruby рамка за динамични приложения
Разширени тактики за силно съвместни, отдалечени екипи
Разширени тактики за силно съвместни, отдалечени екипи
Популярни Публикации
  • лицензи с отворен код, които да избягвате
  • безплатни работещи номера на кредитни карти 2017
  • Въпроси за интервю за изтичане на java памет
  • последната стъпка в процеса на капиталово бюджетиране е
  • най-добрите приложения за android nouga
  • какво е пъргав треньор
Категории
  • Agile Talent
  • Растеж На Приходите
  • Мобилен Дизайн
  • Управление На Проекти
  • © 2022 | Всички Права Запазени

    portaldacalheta.pt