Anonymous
асп компилится
Anonymous
может для каких-то конкретных типов проектов только
Artyom
асп да, но js/html/css
Artyom
для верстки только
Alexander
Я считаю, можно и dll-ку в работающем приложении подменить, было бы желание.
Anonymous
асп не так работает
Alexander
* и необходимость, конечно
Denis
Давайте проверим уровень чатика, кто уже распробовал Relay и GraphQL?
Вадим
я бы сказал не уровень, а наличие свободного времени на подобные эксперименты)
Вадим
graphQL не пробовал, но читал мануал по нему
Вадим
и мне понравилось - хочу попробовать
Evgeny
только желание, возможно на следующей неделе будем пробовать
Evgeny
Denis
Часто еще и хорошо платят. За всем этим - к нам :) www.startup-makers.ru
Alex
Hiring. Hiring everywhere😊 toy_story.jpg
Alexander
Artyom
Evgeny
Денис хотел попиариться
Artyom
оу)) я смотрел graphQl - но пока не вижу смысла его использовать)
Alexander
А правда, что всех средней руки node-разработчиков в Москве купил AliBaba?
Вадим
либо я не средней руки, либо это не правда…
Artur
А просвятите на счет алибабы, зачем им node-разработчики?
Artur
С GraphQL знакомился, но пока не уверен, что он мне нужен. Хотя с React тоже самое было, долго вокруг да около ходил.
Alex
Интересно, вывозят или тут офис разработки
Alexander
ну уж явно в Китай всех не повезут )
Kons
Кажется, у Алибабы есть в РФ офис
Alexander
Щас же дешевле всех в России держать
Вадим
Anonymous
отличный способ воровать идеи
Kons
За рекламу надо платить :)
Вадим
ну если уж на то пошло, то на этом ленде эта тема тоже “сворована”)
Anonymous
пойду ее сворую тоже
Kons
Anonymous
да
Alexander
https://github.com/npm/npm-expansions
Alexey
Dmitry
Alex
В чем профит?
Alex
В смысле graphql, не обертки
Alexey
Можно запрашивать что тебе нужно, без каких либо модификаций на сервере
Alexey
Ну и ты не стучишься на разные роуты, роут всегда один, просто запросы шлешь разные
Alexey
Как то это более логично когда речь идет о данных, приятно получается
Alexey
Просто это другой способ общения с сервером. Кода на сервере не всегда меньше получается.
Alexey
Но следующие проекты хочется уже делать на graphql. Если речь идет об одностраничниках, приложениях вообще, как апи графкл крут и удобен.
Вадим
теперь мне еще больше захотелось
Alexey
И доку он сам генерит
Alexey
Можно зайти и через интерфейс глянуть какие запросы можно сделать, какие объекты с какими поляме вернет, какого они типа
Dmitry
Alexey
Хм. А почему свою решили делать?
Да что то не нашел ничего годного и попроще. Мне тупо нужно иметь возможность сделать запрос, получить данные, прогнать их через normalizr и получить плоские массивы сущностей. Для простоты в общем. Ничего сложного нет в ней.
Denis
Изучайте GraphQL, иначе потом долго догонять будете) https://medium.com/the-graphqlhub
Alexey
“GraphiQL: GraphQL’s Killer App” @clayallsopp https://medium.com/the-graphqlhub/graphiql-graphql-s-killer-app-9896242b2125
Alexey
Вот кстати да, там тоже назвали это киллер фичей
S
поэтому все пишут свои велосипеды
Alexey
S
и шо это?
S
ну допустим есть миддлвары эти всякие, но с мускулем мне как работать, как оно с реальными данными работает?
S
похоже очень на swagger
S
Alexey
есть обертки вокруг mongodb, но это лишнее, ведь иногда нужно что то из редиски добрать или из других бд
S
кароче, GraphQL это хорошо для фронтенд разработчика, но жуткий геморрой для бэкенд разработчика
S
возможно игра стоит свеч, когда у тебя куча клиентов, ведь GraphQL писался как раз для моб. приложений, т.к. стандартного апи фейсбуку стало не хватать, для выражения связей
Alexey
описываешь типы, откуда что добирать
import {
GraphQLObjectType,
GraphQLEnumType,
GraphQLList,
GraphQLString,
GraphQLDate,
GraphQLPeer,
GraphQLMessage,
GraphQLUser
} from 'src/graph';
import {
Message,
Peer,
User
} from 'src/models';
export const GraphQLTicketState = new GraphQLEnumType({
name: 'TicketState',
values: {
open: {},
adminCloseRequested: {},
userCloseRequested: {},
closed: {}
}
});
export const GraphQLTicket = new GraphQLObjectType({
name: 'Ticket',
fields: () => ({
_id: {
type: GraphQLString
},
chat: {
type: GraphQLPeer,
resolve(source) {
return Peer.findOne({
customId: source.chat,
channel: source.channel
});
}
},
date: {
type: GraphQLDate
},
assignedTo: {
type: GraphQLUser,
resolve(source) {
return User.findById(source.assignedTo);
}
},
assignedToHistory: {
type: new GraphQLList(GraphQLUser),
resolve(source) {
return User.find({
_id: {
$in: source.assignedToHistory
}
});
}
},
state: {
type: GraphQLTicketState
},
messages: {
type: new GraphQLList(GraphQLMessage),
resolve(source) {
return Message.find({
ticket: source._id
})
}
}
})
});
Alexey
тут монгуз обычный юзается
Alexey
описываешь сам запрос
import Promise from 'bluebird';
import {
GraphQLList,
GraphQLInt,
GraphQLTicket,
GraphQLTicketState,
GraphQLObjectID
} from 'src/graph';
import {
Ticket
} from 'src/models';
export const ticket = {
type: GraphQLTicket,
args: {
id: {
type: GraphQLObjectID
}
},
resolve(source, args) {
//@TODO check
return Ticket.findOne(args.id);
}
}
export const allTickets = {
type: new GraphQLList(GraphQLTicket),
args: {
state: {
type: new GraphQLList(GraphQLTicketState)
}
},
resolve(source, args, {
rootValue: {
me,
organization
}
}) {
if (me.cannot('getAll', Ticket)) {
return Promise.reject(new Error('access_denied'));
}
let query = Ticket.find({
organization: organization._id
});
if (args.state) {
query = query.where('state').in(args.state);
}
return query;
}
};
Alexey
как бы все
S
я эту же логику могу написать на клиенте, при этом на сервере достаточно ручек для каждой модели только
S
профит то в итоге в чем? что у тебя на клиенте абстракция от логики бэкенда?
Alexey
я вроде писал уже. абстракций тут нет никаких.
S
В GraphQL состав результата запроса диктуется клиентом и содержит только необходимый набор данных - лишь то, что запросил клиент и ничего лишнего. Запрос оформляется в форме иерархического набора полей, а ответ приходит в отзеркаленном формате JSON с заполнением полей необходимыми данными. Корректность запроса обеспечивается через встроенную систему проверки типов.
это и есть абстрагирование от доступных возможностей бэкенда
Alexey
т.е ты фразу ничего лишнего назвал абстрагированием? ну ок
Alexey
я бы сказал это унификация интерфейса апи. потому что знать схему тебе все равно нужно, что бы расспарсить приходящие данные.
S
S
но тут еще и типов полно новых
Alexey
ну цель сваггера это задокументировать и предоставить rest апи
S
Alexey
ну это удобно, поэтому и появился graphql, только он заолдскулил рест запросы