使用GraphQL获取pixiv的排行榜API
我利用express来进行GraphQL练习,并编写了一个返回Pixiv排行榜的GraphQL API服务器。您可以在这里玩耍。
示威
akameco/graphql-pixiv-api = 赤目琥珀/graphql-pixiv-api
只需将express-graphql中间件添加到express中即可实现。graphiql是参数选项,用于演示目的,非常出色。
const graphqlHTTP = require('express-graphql')
app.use(
'/graphql',
graphqlHTTP({
schema,
rootValue: resolver,
graphiql: true,
})
)
接下来,将建立的 GraphQL 架构作为参数传递给 buildSchema 方法。
const { buildSchema } = require('graphql')
const schema = buildSchema(`
type User {
id: Int
name: String
account: String
profileImageUrls: ProfileImageUrls
}
type ProfileImageUrls {
medium: String
}
type Tag {
name: String
}
type ImageUrls {
squareMedium: String
medium: String
large: String
}
enum Mode {
day
week
month
day_male
day_female
week_original
week_rookie
}
type MetaSinglePage {
originalImageUrl: String
}
type Illust {
id: Int
title: String
type: String
caption: String
tags: [Tag]!
imageUrls: ImageUrls
width: Int
height: Int
totalBookmarks: Int
user: User
tools: [String]
metaSinglePage: MetaSinglePage
}
type Query {
ranking(mode: Mode = "mode"): [Illust!]!
}
`)
module.exports = schema
这真的非常方便呢。
代码不超过30行,除去注释的话。
只要考虑类型,而不用考虑路由,写起来的感觉很好。实现的成本也较低,甚至可能比常规的API编写速度更快。
情绪
我对此还没有仔细研究,但如果想要在Flow或TypeScript中共享类型,应该如何编写呢?
如果有人对这方面的实现有经验,请务必告诉我。
另外,如果有任何讨论,请在评论栏或Twitter留言。
我搭建了一个pixiv排名的GraphQL API服务器来练习GraphQL。只需点击一下即可玩耍。
这个画完真是太方便了 pic.twitter.com/hgoDIhCQgR— 無職.js (@akameco) 2017年9月8日
github https://t.co/PFga0kQg5y— 無職.js (@akameco) 2017年9月8日
提醒注意
因为Pixiv返回的JSON是私密的,所以我没有编写完整的模式。
对于这种封装情况,从请求生成GraphQL类型似乎是最佳方式。
这也是未来的一个问题。