Никита Галкин "Spec driven development in Microservices"
-
Upload
fwdays -
Category
Technology
-
view
345 -
download
0
Transcript of Никита Галкин "Spec driven development in Microservices"
Никита
Галкин
Backendразработчик
ЛюблюHighload,OpensourceиХакатоны
Умеюделитьмонолитынамикросервисы
наPHPиNode.js
вкомпания Ciklum(ThomasCook)
galk-in galkin galk_in nikitagalkin
Вчем
проблема?Бизнесрешаетлюбуюпроблемуновым
процессом:
Плохо=>Будемпроверять=>TDD
Нето=>Делаемвместе=>Scrum
Долго=>Автоматизируем=>CI/CD
Дорого=>Наймемдругих=>Outsorcing
Непонятно=>Говоритепонятно=>DDD
–QAинформируетобаге
–Ответственныхнет,ниBE,ниFEнемогут
воспроизвести
–Фронтэндсчитает,чтовиноватбэкенд
–Бэкендсчитает,чтовиноватфронтэнд
–"Ивообщеунассвоихбаговхватает"(c)
НапримереREST:
1.Структураданных
JSONschema
2.Методыработысданными
endpoints
3.Информированиеобошибках
Responsecodes
1.Использованиестандарта
2.Консистентность(согласованость)
3.Версионность
4.Семантичность(компилируемость)
5.Актуальность
–ЕстьмонолитBackendдляiOS/Androidприложения
–Большойнакопленныйтехническийдолг
–СкоробудетрефакторингBackend-а
–Бэклогпустой
–Чтоделать?
Как
тестировать–UnitTesting
–IntegrationTesting
–ComponentTesting
–ContractTesting
–EndtoEndTesting
TestingstrategiesinMicroServicesbyMartinFowler
Как
тестировать–TDDUnitTesting
–TDDIntegrationTesting
–TDDComponentTesting
–SDDContractTesting
–BDDEndtoEndTesting
Валидироватьвходныеданные
Автоматизироватьконтрактноетестирование
Делатьmockмикросервисов
Генерироватьstubданные
Генерироватьдокументацию
Автоматизироватьтиповыедействия
Структура
данных JSONschema
{
"id":"http://example.com/entry-schema#",
"$schema":"http://json-schema.org/draft-04/schema#",
"title":"ExampleSchema",
"type":"object",
"properties":{
"firstName":{
"type":"string"
},
"lastName":{
"type":"string"
},
"age":{
"description":"Ageinyears",
"type":"integer",
"minimum":0
}
},
"required":["firstName","lastName"],
"additionalProperties":false
}
Валидация varschema=require('../../schemas/user.json');
varvalidate=require('jsonschema').validate;
Controller.prototype.validate=function(req,res,next){
varvalidatorResult=validate(req.body,schema);
if(validatorResult.valid)returnnext();
next({code:400,error:validatorResult.errors});
};