使用 Apollo-Server-Express 从服务器中使用光标分页查询 REST API

Posted

技术标签:

【中文标题】使用 Apollo-Server-Express 从服务器中使用光标分页查询 REST API【英文标题】:Querying REST API with Cursor Pagination from Server with Apollo-Server-Express 【发布时间】:2018-12-24 11:13:30 【问题描述】:

使用 Apollo-Server-Express,我想用 GraphQL 包装一个 REST API。我从免费使用 SWAPI(星球大战 API)开始。我找不到任何关于使用 apollo-server-express 使用光标分页进行服务器端获取的信息。我发现唯一可能的事情是 fetchMore,因为它是针对 Apollo 客户端的。任何帮助将不胜感激。这是我的代码:

schema.js

// Imports: GraphQL
import  makeExecutableSchema  from 'graphql-tools';

// Imports: GraphQL TypeDefs & Resolvers
import TYPEDEFS from './types.js';
import RESOLVERS from './resolvers.js';


// GraphQL: Schema
const SCHEMA = makeExecutableSchema(
  typeDefs: TYPEDEFS,
  resolvers: RESOLVERS
);

export default SCHEMA;

types.js

const TYPEDEFS = `
    type Query 
    getFilm(id: ID): Film
    getAllFilms: [Film]


type Film 
    title: String!
    episode_id: Int!
    opening_crawl: String
    director: String
    producer: String
    release_date: String
    characters: [Person]
    planets: [Planet]
    starships: [Starship]
    vehicles: [Vehicle]
    species: [Species]
    created: String
    edited: String
    url: String
    
`

export default TYPEDEFS;

解析器.js

import fetch from 'node-fetch';


const RESOLVERS = 
    Query: 
        // Search for a Film by ID
        getFilm: async (parent, args) => 
            const response = await
            fetch(`https://swapi.co/api/films/$args.id`);
            return response.json();
        ,
        getAllFilms: async (parent, args) => 
            const response = await
            fetch(`https://swapi.co/api/films/`);
            return response.json();
        
    
;

export default RESOLVERS;

【问题讨论】:

【参考方案1】:

我相信apollo-server 不提供开箱即用的光标分页。

您可以自己实现它。或者,您可以使用(或获得灵感)Relay 使用的那个。

根据Apollo client,如果您使用 Relay 样式的光标分页,客户端支持它。

【讨论】:

以上是关于使用 Apollo-Server-Express 从服务器中使用光标分页查询 REST API的主要内容,如果未能解决你的问题,请参考以下文章

使用 ApolloClient 和 Apollo-Server-Express 处理 GraphQL 错误

在 apollo-server-express 中增加身体限制大小

Apollo-Server-Express 未收到上传对象

使用 apollo-server-express 迁移到 3.5.0

Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接

如何选择性地允许 apollo-server-express 中的查询?