@gotamedia/everysport-datasource-http
v0.4.3
Published
Fetch data from EverySport api wrapped in an Apollo RESTDatasource class
Downloads
3
Readme
Everysport datasource http
This package is a data fetcher for the Everysport api wrapped in an Apollo RESTDatasource class. It exports TypeScript types and JavaScript methods to fetch data from the different endpoints in their api. It can be used as a resolver for a GraphQL subgraph inside an Apollo Federated SuperGraph setup.
Install
$ npm install @gota/everysport-datasource-http
Usage
In apollo server v4 the datasource can be passed in with the context and be used in your resolver to do the actual data fetching.
index.ts
import { ApolloServer } from '@apollo/server'
import { startStandaloneServer } from '@apollo/server/standalone'
import { typeDefs, resolvers } from './schema'
import { EverysportDatasourceHTTP } from '@gota/everysport-datasource-http
interface MyContext {
dataSource: EverysportDataSourceHTTP
}
const sportAPI = new EverysportDataSourceHTTP({
baseURL: 'https://everysports.url',
key: 'secret-key',
version: '1'
})
const server = new ApolloServer<MyContext>({ typeDefs, resolvers })
await startStandaloneServer(server, {
context: async ({ req }) => ({ dataSource: sportAPI})
})
resolvers.ts
export const resolvers = {
Query: {
sports: (_, __, { dataSource }) => dataSource.getSports(),
events: (_, args, { dataSource }) => dataSource.getEvents({ leagueId: args.leagueId }),
topScorers: (_, args, { dataSource }) => dataSource.getTopScorers(args.leagueId)
},
}
Reference
The EverysportDataSourceHTTP
implementation exposes the following methods to fetch data by:
getSports(): Promise<SportModel[]>
getEvents(args: EventsArgumentsInterface): Promise<EventModel[]>
getTopScorers(leagueId: number): Promise<TopScorerPlayerModel[]>
getStandings(leagueId: number): Promise<GroupModel[]>
The following TypeScript types is exported:
- SportModel
- EventModel
- PlayerModel
- TeamModel
- TopScorerPlayerModel
- GroupModel
- StandingModel
- MetadataModel
They can come in handy when you compose your graphql subgraph and resolvers.
These are also of interest and describes what you can pass in as arguments to the various data fetch methods:
- EventsArgumentsInterface
- SportsArgumentsInterface