GraphQL для чтения и отдыха для записи

В контексте взаимодействия сервера с сервером, а точнее в рамках различных микросервисов, стоит ли использовать GraphQL?

Идея состоит в том, чтобы позволить потребителям получать только релевантные для них поля. Можно построить проекции полей для конечных точек REST GET или использовать для этого библиотеку, например. Rest.li.

В эпоху, когда GraphQL существует для решения подобных проблем, было бы разумнее использовать GraphQL для чтения (именно здесь GraphQL приносит большую пользу) и по-прежнему использовать REST для операций записи (есть несколько веских причин, по которым переход на GraphQL на данный момент запись невозможна)?


person GSSwain    schedule 05.08.2020    source источник
comment
Как клиент узнает, какие данные для него важны? Не зная априори доступных свойств того или иного ресурса, я сомневаюсь, что это действительно хороший дизайн. В этом ответе я резюмировал, как Филдингс понимает, как GraphQL можно комбинировать с REST, где Филдинг предлагает: A client can POST to a REST service to create a resource that is a GraphQL query, and then GET that resource with all benefits of REST…   -  person Roman Vottner    schedule 05.08.2020
comment
Существует существующий ресурс REST, скажем, с 10-20 полями как часть ответа GET. Большинству сервисов потребуется 1-3 поля (в основном разные в зависимости от клиента). В некотором смысле клиент знает, какие поля ему нужны. Имеет ли смысл в этом случае поставить GraphQL api для READ? По сути, мы получим REST и GraphQL в нашем стеке. Плохая идея иметь и то, и другое для связи между серверами?   -  person GSSwain    schedule 06.08.2020
comment
Технически возможно, но вопрос о том, является ли это решение RESTful, - другой вопрос. Т.е. у вас может не получиться легко кэшировать ответы GraphQL, поскольку все запросы нацелены на одну и ту же конечную точку и, следовательно, используют один и тот же URI (= ключ кеша). Таким образом, это нарушит кешируемое ограничение REST. Однако вы можете использовать либо выделенные типы мультимедиа, которые указывают, какие свойства возвращать, либо использовать ресурсы, поддерживающие представления и т. д.   -  person Roman Vottner    schedule 06.08.2020
comment
Спасибо @RomanVottner за ваше время и ответ. Хотел сравнить то, что сегодня возможно с GraphQL, с тем, что мы делали только с REST.   -  person GSSwain    schedule 07.08.2020