Мы использовали Avro IDL для определения наборов сообщений, используемых на нашей серверной части Kafka, и нам это очень нравится. Мы также были заинтересованы в проверке JSON
API REST в приложении Python Flask со схемой Avro, и столкнулись с некоторыми трудностями.
Существует множество пакетов, но мне еще предстоит найти что-то, что явно работает так, как мне нужно. Я надеюсь на какое-то руководство.
Я могу взять мой avdl
файл и сгенерировать набор avsc
файлов с:
avro-tools idl2schemata message.avdl output_dir
или
avro-tools idl message.avdl > output_dir/schema.avsc
И я могу читать их на python, но я не нашел ничего «легкого», что могло бы просто сказать мне, соответствует ли мой ввод JSON схеме.
Кто-нибудь делал что-то подобное? Я иду по неверному пути? Любой совет будет оценен спасибо.
Я знаю, если бы я играл на земле SpringBoot, это было бы ОЧЕНЬ просто.
Спасибо
IDL
@namespace("org.jeeftor.avro")
protocol TacoRequest {
enum MeatType{
CHICKEN,
BEEF,
TURKEY,
FISH
}
enum CheeseType {
GROSS_VEGAN,
ACTUAL_COW_CHEESE,
GOAT_CHEESE
}
enum Toppings {
LECHUGA,
TOMATO,
SAUCE
}
record Taco {
MeatType meat;
CheeseType cheese;
array<Toppings> toppings;
}
record Order {
union { string, int } order_id;
array<Taco> tacos;
}
}
Схема
Я создаю схему с: avro-tools idl order.avdl protocol.avpr
{
"protocol" : "TacoRequest",
"namespace" : "org.jeeftor.avro",
"types" : [ {
"type" : "enum",
"name" : "MeatType",
"symbols" : [ "CHICKEN", "BEEF", "TURKEY", "FISH" ]
}, {
"type" : "enum",
"name" : "CheeseType",
"symbols" : [ "GROSS_VEGAN", "ACTUAL_COW_CHEESE", "GOAT_CHEESE" ]
}, {
"type" : "enum",
"name" : "Toppings",
"symbols" : [ "LECHUGA", "TOMATO", "SAUCE" ]
}, {
"type" : "record",
"name" : "Taco",
"fields" : [ {
"name" : "meat",
"type" : "MeatType"
}, {
"name" : "cheese",
"type" : "CheeseType"
}, {
"name" : "toppings",
"type" : {
"type" : "array",
"items" : "Toppings"
}
} ]
}, {
"type" : "record",
"name" : "Order",
"fields" : [ {
"name" : "order_id",
"type" : [ "string", "int" ]
}, {
"name" : "tacos",
"type" : {
"type" : "array",
"items" : "Taco"
}
} ]
} ],
"messages" : { }
}
У меня вопрос, как легко использовать эту «схему» для проверки ввода.