Doing in Rails, was eine komplexere/kreative Lösung erfordern, aber grundsätzlich Grape, active_model_serializers (AMS) und traube-Kaminari, um eine Indexroute (Liste) von User-Objekten , und ich möchte die Vorteile von AMS beim Caching und einfachen Serialisieren von Objekten nutzen, aber die JSON-Antwort anpassen.Rails Grape API Seitenumbruch mit AMS und benutzerdefinierten JSON
Hier Rebsorte:
module API
module V1
class Users < Grape::API
include API::V1::Defaults
include Grape::Kaminari
resource :users do
paginate per_page: 18
get do
users = User.all
paginate users
end
end
end
end
end
Und AMS:
class UserSerializer < ActiveModel::Serializer
cache key: 'user', expires_in: 3.hours
attributes :id, :firstname, :lastname, :email, :username
end
Ideal Antwort in JSON:
{
users: [
{
id: 1,
firstname: "Daniel",
lastname: "Archer,
email: "[email protected]",
username: "dja"
},
{
id: 2,
firstname: "Fakey",
lastname: "McFakerson,
email: "[email protected]",
username: "fake"
}
],
extras: {
user_count: 300,
new_users_last_5_days: 10,
new_users_last_30_days: 25
}
}
Was ich passieren möchte (und mit Mühe haben) ist um die Anzahl der Benutzer in der JSON-Antwort zu paginieren, aber einige Extras, die sich auf die gesamte Benutzergruppe beziehen. Zum Beispiel kann ich 300 Benutzer haben, aber ich möchte nur die ersten 18 Benutzer (oder wie viele basierend auf den Parametern per_page
und page
) und zusätzliche Daten für die gesamte Sammlung zurückgeben.
Sie sind also sagen, fügen Sie einfach 'vorhanden: Extras, {USER_COUNT: User.count, ...}' auf einer Linie nach 'Paginieren Benutzer'? Das scheint bei mir nicht zu funktionieren. –
Oder erfordert das die Verwendung von Grape-Entity? –
Ich benutze es mit und ohne Grape-Entity. –