    async def get(self):
        """GET /api/proxy fetches the routing table

        This is the same as fetching the routing table directly from the proxy,
        but without clients needing to maintain separate
        """
        offset, limit = self.get_api_pagination()

        all_routes = await self.proxy.get_all_routes()

        if offset == 0 and len(all_routes) < limit:
            routes = all_routes
        else:
            routes = {}
            end = offset + limit
            for i, key in enumerate(sorted(all_routes.keys())):
                if i < offset:
                    continue
                elif i >= end:
                    break
                routes[key] = all_routes[key]

        if self.accepts_pagination:
            data = self.paginated_model(routes, offset, limit, len(all_routes))
        else:
            data = routes

        self.write(json.dumps(data))
GET /api/proxy fetches the routing table

This is the same as fetching the routing table directly from the proxy,
but without clients needing to maintain separate
jupyterhub/apihandlers/proxy.py