使用GraphQL获取pixiv的排行榜API

我利用express来进行GraphQL练习,并编写了一个返回Pixiv排行榜的GraphQL API服务器。您可以在这里玩耍。

示威

https://gyazo.com/9738386ac8554007cc5ec8aba5bfcde2

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类型似乎是最佳方式。
这也是未来的一个问题。

广告
将在 10 秒后关闭
bannerAds