GRAND Stack 빠른 원형 제작 – 2부
GRAND Stack Express 원형: 2부
- 제품 소개, 기술 사양 및 그래픽 모델.
- Apollo Graphql 서버 및 neo4j Graphql js
-Apollo client and React
neo4j Graphql js가 있는 Graphql 서버
neo4jgraphqljs의 주요 장점은 자신의graphql해상도를 작성하여cypher에 조회를 의뢰하는 것이다.그것은neo4j를 업무 논리의 작업마로 만들었다.또한 페이지 나누기, 필터링, 무서운 N+1 쿼리 문제도 담당합니다.패턴의 유형 정의를 예로 들자.그래픽 QL:
type User {
userId: ID!
name: String
email: String!
matchCandidates: [UserWithScore!]!
@cypher(
statement: """
MATCH (this)-[:PREFERS]->()<-[:PREFERS]-(candidate:User)
WHERE NOT EXISTS((this)-[:LIKES|:DISLIKES]->(candidate))
WITH candidate, COUNT(*) AS score ORDER BY score DESC
RETURN {userId:candidate.userId, score:score}
"""
)
matchedWith: [Match!]! @relation(name: "MATCHED", direction: "OUT")
}
type Match {
matchId: ID!
date: Date!
createdAt: Date!
users: [User!]! @relation(name: "MATCHED", direction: "IN")
tracks: [Track!]! @relation(name: "HAS", direction: "OUT")
}
type Mutation @isAuthenticated {
like(from: ID!, to: ID!): LikeResult
@neo4j_ignore
@cypher(
statement: """
MATCH (n:User {userId:$from}),(o:User {userId:$to} )
OPTIONAL MATCH (n)<-[r:LIKES]-(o)
MERGE (n)-[:LIKES]->(o)
WITH n,o,r
CALL apoc.do.when(r IS NOT NULL,
'MERGE (n)-[:MATCHED]->(m:Match { matchId:apoc.create.uuid(),createdAt:datetime()})<-[:MATCHED]-(o) RETURN {matchId:m.matchId, matched:true, email:o.email} as result',
'RETURN {matched:false} as result',
{n:n, o:o}
) YIELD value
RETURN value.result
"""
)
addTrack(userId: ID!, matchId: ID!, type: String!, desc: String!): Track!
@cypher(
statement: """
MATCH (n:User {userId:$userId}), (m:Match {matchId:$matchId})
MERGE (n)-[:ADDED]->(t:Track {trackId:apoc.create.uuid(), type:$type,description:$desc, matchId:m.matchId, createdAt:datetime()})
MERGE (m)-[:HAS]->(t)
return t
"""
)
}
Neo4j graphql js에는 다음과 같은 코드를 허용하는 유용한 graphql 모드 명령이 포함되어 있습니다.typedef에서neo4j 조회를 직접 작성합니다.
const resolvers = {
Mutation: {
like: async (obj, args, context, info) => {
const result = await neo4jgraphql(obj, args, context, info);
if (result.email) {
sendEmail(result.email);
}
return result;
},
},
};
const server = new ApolloServer({
schema: makeAugmentedSchema({
typeDefs,
resolvers,
config: {
auth: { isAuthenticated: true },
},
}),
context: ({ req }) => ({
req,
driver,
}),
});
위의 두 코드 블록에서 우리는 실제적으로 90%의api 서버를 지정했다.이전 부분에서 우리는 유형 User의 matchCandidates 필드를 토론했다.이제 유사한 돌연변이를 한 줄 한 줄 검사합시다.먼저 @neo4j_ignore를 보았습니다. 두 번째 코드 블록에 사용자 정의 해상도를 지정하여 도형과 직접적으로 관련이 없는 논리를 추가합니다. (이 예에서 전자메일을 보냅니다.)다음은cypher 조회입니다.한 줄씩배달
GRAND stack의 관건적인 특성은 그림으로 업무 수요를 모델링하는 것을 완성하면 성명성cypher 조회 언어로 유형 정의를 써서 업무 논리층을 설정할 수 있다는 것이다. 그림은 각종 복잡한 수요에 자연스럽게 적응하기 때문이다.
그걸 더 잘 설명하기 위해서만약에 우리가 삼자 일치 요구를 추가하고 싶다면, 만약에 Alice가 Bob과 Claire와 서로 비슷한 점이 있고 Bob과 Claire 사이에 서로 비슷한 점이 있다면 삼자 일치 카드를 만듭니다.이것이 바로 백엔드가 이 요구를 충족시키는 어려움의 정도입니다.
type User{
...
threeWayMatches:[[User!]]!
@cypher(statement:"""
MATCH (u1:User)-[:MATCHED*2]-(this)-[:MATCHED*2]-(u3:User)
WHERE EXISTS((u1)-[:MATCHED*2]-(u3))
RETURN u1,u3
""")
}
짧은 세 줄의 문자에서 우리는 심상치 않은 요구를 만족시켰다. 이것은 우리로 하여금 다음과 같은 제품 구호의 합리성을 증명하게 했다. "모든 해리에게 우리는 헤민과 론을 찾는 데 도움을 줄 것이다."우리의 도형
neo4j를 사용하여graphql 서버를 설정하는 효율이 매우 높습니다.화살표 도구를 만지작거리고 도표를 그린 후, 나는 2시간 안에 matchandhack.com 사용할 수 있는 서버를 찾았다.에서 우리는 apollo 클라이언트가 어떻게 전단의 데이터 관리를 간소화하고 우리가 LAMP 창고의 생산력 수준에 더욱 가깝게 하는지 보게 될 것이다.
Reference
이 문제에 관하여(GRAND Stack 빠른 원형 제작 – 2부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ilyasm/quick-prototyping-with-grand-stack-part-2-3795텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)