Я занимаюсь рефакторингом API-интерфейса аналитики, который должен позволять клиентам отправлять события в виде HTTP-запросов GET, а их данные «Hit» кодируются в URL-адресах Параметры QueryString .
Моя задача API - получать эти события, а затем помещать "действительные" события в очередь в другой части системы для обработки.
Некоторые хиты имеюттой же формы.Единственное, что отличает их, - это значение параметра type
, который должен иметь как минимум все события.
Проблема, с которой я столкнулся, заключается в том, что, основываясь на типе Hit, я хотел бычтобы иметь возможность предположить тип каждого поля, данное мне, что требует привязки модели.Конечно.В настоящее время я могу выяснить, какую модель проверять только после проверки значения type
- что может привести к чрезмерному увеличению API "строковому типу"
Примером маршрута может быть:
GET https://my.anonymousanalytics.net/capture?type=startAction&amount=300&so_rep=true
Следовательно, мой Hit будет:
{
type: "startAction",
amount: 300,
so_rep: true
}
Который, гипотетически, может быть привязан к модели StackOverflowStartHitModel
class StackOverflowStartHitModel {
public string type { get; } // Q: Could I force the value of this to be "startAction"?
? public int amount { get; }
public boolean so_rep { get; }
}
Почему я спрашиваю это здесь?Ну, я обычно являюсь разработчиком JavaScript, но все, к кому я обычно обращаюсь за мудростью на C #, не работают с гриппом.
Я экспериментировал с декоратором атрибутов [FromQuery]
, но меня беспокоит то, чтодля хитов, которые имеют точно такую же форму, я не смог бы определить разницу между, например, startAction
или endAction
.