Evgeny
Я на этой невместимости сейчас весь проект сделал
Vitaliy
А кто дружил Swagger и JSON API?
ну-ка расскажи. а то вот как-то все идеально у меня более того, я использую https://github.com/swagger-api/swagger-node чтобы вывернуть цикл разработки и иметь единственную точку для документации, схем валидации, моков
Denis
Так
Denis
JSON API = http://jsonapi.org, а не API в формате JSON
Vitaliy
и посыпать сверху генерированными тестами: https://github.com/earldouglas/swagger-test
Evgeny
Ну понятно в чём несовместимость
Denis
Ну понятно в чём несовместимость
Да, чё-то у них с конфигом) Обновил ссылку
Evgeny
Вижу. Их я не дружил, не помогу :(
Vitaliy
JSON API = http://jsonapi.org, а не API в формате JSON
пока не вижу никаких проблем. ведь в основе swagger лежит просто json-schema что тебя смущает?
Denis
С тем, что модель данных разная
Denis
jsonapi.org ~= GraphQL
Vitaliy
swagger позволяет сделать любую схему jsonapi предлагает определенную схему разве не так? в чем тут несовместимость?
Vitaliy
а, в формате входных данных, что ли?
Denis
Ну у них принципиально разный подход
Evgeny
jsonapi.org ~= GraphQL
мноооооого костылей
Denis
Не
Denis
У них оч похоже
Vitaliy
Ну у них принципиально разный подход
но в чем? ))) я вижу что можно возвращать дополнительные данные. отлично, в swagger это можно описать!
Denis
> JSON API легко покрывает все CRUD-кейсы, включая пагинацию, фильтрацию, оптимизацию трафика ("includes") и типизацию. На текущий момент, он выглядит как полноценная альтернатива GraphQL и вполне возможно взаимозменяем.
Denis
https://medium.com/@knightstickc/building-an-api-with-swagger-json-api-and-rails-part-1-dbcd5bd3bd23
Denis
Вот чё-то по теме
Vitaliy
ну и что? :) просто еще одно поле данных, которое можно описать в json-schema, а значит и в swagger
Denis
От поля "type" зависит формат данных в "attributes"
Denis
{ "data": [{ "type": "articles", "id": "1", "attributes": { "title": "JSON API paints my bikeshed!" }, "links": { "self": "http://example.com/articles/1" }, "relationships": { "author": { "links": { "self": "http://example.com/articles/1/relationships/author", "related": "http://example.com/articles/1/author" }, "data": { "type": "people", "id": "9" } }, "comments": { "links": { "self": "http://example.com/articles/1/relationships/comments", "related": "http://example.com/articles/1/comments" }, "data": [ { "type": "comments", "id": "5" }, { "type": "comments", "id": "12" } ] } } }] }
Denis
Также может быть: { "type": "people", "id": "9", "attributes": { "first-name": "Dan", "last-name": "Gebhardt", "twitter": "dgeb" }, "links": { "self": "http://example.com/people/9" } }
Denis
В итоге вся валидация строится на "type"
Vitaliy
либо я недостаточно знаком с json api, либо тут можно иначе взглянуть на зависимости: от адреса, по которому делается запрос — зависит тип возвращаемых данных от типа данных — зависит то, какие могут быть дочерние элементы, и какие у них типы данных то есть, все заранее известно, статически, еще до рантайма
Vitaliy
дочерние объекты ведь появляются не с неба, а на основе полей связи? значит можно описать, что у объекта типа "articles" в поле "relationships" могут быть ссылки только на "author" и "comments" друге дело, что swagger (json-schema) не имеют механизмов направленых на облегчение именно этой работы. но выносить и переиспользовать описания можно
Denis
В итоге кажется Swagger это совсем про другой вид API
Vitaliy
я не знаю как в других форматах, но я для себя не вижу проблем в этой задаче кстати, спасибо за jsonapi, видимо буду его использовать, выглядит удобно! :D
Vitaliy
но вообще, я читал где-то что над спекой swagger работают, чтобы можно было проще описывать ссылки на другие объекты
Denis
Вообще у JSON API ноги отсюда растут - http://ember-jsonapi-resources.com/
Vitaliy
так, есть ограничение. нельзя описать поле "included" более подробно, чем просто "массив объектов с полями type, id, attributes, links", поскольку swagger не позволяет использовать oneOf/anyOf
Denis
Плюс эти oneOf/anyOf будут не совсем то
Denis
По сути Swagger = JSON Schema
Denis
Со всеми её статичными и примитивными возможностями
Vitaliy
то есть, нельзя описать, что "included" должно содержать oneOf types/people, types/comment
Denis
Вот так только можно описать похоже - https://medium.com/@knightstickc/building-an-api-with-swagger-json-api-and-rails-part-2-8f9691e3de04
dexofan
У вас тут списочка литературы нет?
Vitaliy
по чему?
Vitaliy
Вот так только можно описать похоже - https://medium.com/@knightstickc/building-an-api-with-swagger-json-api-and-rails-part-2-8f9691e3de04
мужик тут верно говорит: http://discuss.jsonapi.org/t/using-swagger-with-jsonapi-definitions/400/5
Denis
Он говорит I would love to see full convergence of openapi, json schema, and jsonapi, with a good example!
Denis
Потому что I gave up on jsonapi with swagger/openapi.
Denis
А вот следующий чел говорит по делу: JsonApi and hypermedia as a whole are orthogonal to OAS/Swagger fundamentally. It is very simple, the foundational element of the OAS specification is the path, and while in hypermedia APIs it is the vocabulary of the hypermedia. Some elements could be incorporated, but there is no way to fundamentally map one to another without changes to either of those basic properties.
Vitaliy
короче, поле ответа "data" можно детально описать уже сейчас (и это кажется самое главное в ответе) а поле "included" можно описать на сегодняшний день поверхностно (и ладно)
Vitaliy
да я эту гипермедию на сваггере писал! 😂 я к тому, что может я чего-то не понимаю, но для меня гипермедиа — данные, сваггер/схема — формат описания данных, и все это выглядит предельно просто. и пусть даже не все можно описать в сваггере до уровня конкретного поля из-за динамической природы гипермедиа, это все равное дает уйму преимуществ. но если надо детально описывать динамические поля уже сегодня — может отличные от сваггера форматы дают такую возможность. тут все от целей зависит. обычно же good enough is enough :)
Denis
))
Denis
https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/
Denis
Надо подумать: + Отказаться от hypermedia в JSON API и прийти к Swagger, где type == URI + Отказаться от Swagger и прийти к hypermedia с отдельной схемой, как GraphQL Принять во внимание: + Тесты + Security + авто-генерация кода вместо ORM
Vitaliy
прими еще во внимание что дают инструменты вокруг swagger: - автогенерация тестов - валидации входящих/исходящих данных - автогенерация mock ответов (чтобы клиент разрабатывался до окончания работы над сервером)
KlonD90
а это как?
Vitaliy
"где type == URI" — вот почему я не видел проблемы. я был уверен, что не может возникнуть желания отдавать разные типы по одному и тому же URI
Vitaliy
а это как?
https://github.com/earldouglas/swagger-test https://github.com/swagger-api/swagger-node мне очень нравится swagger-центричная разработка
Vitaliy
Vitaliy
даже роуты не надо описывать в коде — достаточно указать в swagger имя контроллера, который должен обрабатывать запрос
KlonD90
надо будет для мобилок через swagger сделать API
Vitaliy
так и делал для одного клиента
Paul
Ребята, есть хорошие доки по node + mongoDB? Спасибо
I am
Есть, незачто )
I am
(https://github.com/sahat/hackathon-starter)
Anonymous
Привет, такой вопрос, если при обработке запроса от 1го клиента, возникает ошибка, процесс упадет и все клиенты обрабатываемые этим процессом в д анный момент отвалятся, как с этим быть? Напрмер в пхп где на 1го клиента новый процесс, клиенты изолированы и такой проблемы нет
Nikolay
писать правильный код, обкладыватся try catch
Anonymous
Я так и представлял себе это, но после ПХП как то страшно становится
Nikolay
ну пхп поэтому и медленее )
Evgeny
Набирать обработчик исключений)
Evgeny
Написать *
Anonymous
что это значит? что то вроде global.on('error') ?
Anonymous
process*
Evgeny
Да process. On
Anonymous
по моему наверху перехватывать не хорошо
Evgeny
+, а что делать)
Evgeny
Писать их в лог + оповещать
Anonymous
ну ладно я вас понял, спасибо
Anonymous
а шарить данные между процессами? мемкеш ?
Evgeny
Тут не подскажу (
Anonymous
какой сейчас топовый интсрументарий для разработки серьезных вещей на ноде?)