2016-04-18 4 views
1

Я хочу создать объекты, представляющие структуры данных, которые передаются обратно и обратно в службу Restful.Хорошая абстракция для взаимодействия с Restful service в Scala?

  1. Там должно быть очевидно, что и прямая связь между записью, как описано в службе, а запись в взаимодействовали с в коде Scala, например, obj.id означает поле объекта id.

  2. Я хочу, чтобы определить, какие поля составляют запись декларативным способом.

  3. Для каждого поля я хотел бы также объявить атрибуты как обязательные/необязательные, уникальные, тип данных, максимальную длину, минимальные/максимальные значения, значения по умолчанию и т. Д., Как и определение таблицы в SQL

  4. obj.json возвращает объект сериализуется в виде строки в формате JSON

  5. TypeCompanionObject.fromJson возвращает obj из строки JSON

  6. Я хочу, чтобы иметь возможность определить общие тестовые случаи, которые могут быть применены к любому полю типа String, или на любое поле, которое помечено Required и т.д.

Первоначально я попытался с помощью простого класса дела и Genson сделать сериализации и де-сериализации. Это позаботилось о требованиях 1, 2, 4 и 5. Но это действительно не позволяло мне делать 3 или 6.

Какая хорошая модель, которая удовлетворит все мои требования?

+0

Вопросов просящих сторонних библиотек являются не по теме. –

+0

Это лучше? –

ответ

0

Я не думаю, что 3 и 6 должны быть частью json databinding lib. Самое простое решение для 3 - подключить к вашему fromJson некоторую валидацию над десериализованным объектом. Валидация может быть реализована внутри объекта-компаньона ваших классов случаев или в каком-либо методе проверки, реализованном классами case, без перехода на путь чего-то сверхъестественного и общего. Конечно, вы можете подключить к нему какую-то общую библиотеку, если хотите.

Есть другие варианты, где вы можете прямо подключить свою проверку в Genson. Но это мне не нужно.

+0

Если бы все, что я хотел, было библиотекой для привязки данных, тогда мое исходное решение сработало бы. 3 и 6 для меня описывают характеристики службы, поэтому я могу легко вывести тесты. Например, если я объявляю, что поле является «необязательным», тогда автоматически генерируется тестовый пример, чтобы проверить, что произойдет, если поле отсутствует. Если я помечаю его как «readOnly», тогда другой тест пытается обновить поле и проверяет, что обновление не работает, и так далее. –

+0

В принципе, я определю кучу общих/многоразовых тестовых примеров, а затем просто аннотируя класс (или его сопутствующий объект), есть краткий и декларативный способ указания того, какие из стандартных тестов применять. –

+0

Если есть лучший способ сделать это, мне бы понравились предложения. –

0

Я мог бы попытаться достичь 3, добавив некоторые пользовательские аннотации к полям. Я не знаю точно, но у меня есть уверенность в том, что сериализаторы/десализаторы json должны иметь возможность выбирать эти аннотации, поэтому вы сможете проверить их во время выполнения. Я думаю, что некоторые вариации данного подхода могут помочь вам решить 6. И я согласен с Eugen, что вы можете найти что-то похожее в библиотеке

привязки данных
case class Person(
    @Required name: @Required String, age: Int, @Optional gender: Gender 
)