Ich versuche, eine Phoenix-Anwendung mit generierten HTML-sowie JSON API Antworten zu erstellen. Dies ist, was ich bisher getan haben:Phoenix json gibt nur IDs
mix phoenix.gen.html User users name:string email:string
mix phoenix.gen.json Api.User users --no-model
Dann änderte ich den Alias in Usercontroller von „alias MyApp.Api.User“ bis „alias Api.User“. Und es funktioniert! .. naja meistens!
Dies ist, was ich in HTTP-Antwort erhalten:
{"data":[{"id":1},{"id":2}]}
Das Problem, das ich zu beheben versuche ist - wenn ich auf der Api GET rufen, bekomme ich nur eine Liste von IDs; Alle anderen nützlichen Felder werden nicht zurückgegeben. IO.inspect sagt mir, dass der Controller alles zurückgibt. Es muss also die Ansicht sein, die Felder ausfiltert.
Allerdings ist mein Verständnis von Elixir/Phoenix hier zu kurz. Das ist, was ich sehe:
def render("index.json", %{users: users}) do
%{data: render_many(users, MyApp.Api.UserView, "user.json")}
end
Meine grundlegende Frage - Wie kann ich in render_many Methode tauchen und herauszufinden, was dies zu beheben geschieht?
Meine sekundären Fragen sind:
- Gibt es eine gute Ressource html und json api arbeiten zusammen in Phoenix zu bekommen?
- Was ist "user.json" im obigen Code? In Bezug auf "index.json" denke ich, dass es nur für die Mustererkennung verwendet wird.
In diesem Fall Controller wissen müssen ob die angeforderte Ressource html oder json ist, die möglicherweise vom Verbindungsobjekt gelesen werden kann. Das andere Problem ist - die Standard-HTML-und JSON API-Controller sind unterschiedlich. Der JSON-API-Controller fügt der Antwort einen Statuscode hinzu, während der HTML-Controller dies nicht tut. – Puneet
Der Statuscode ist nicht so wichtig für Anfragen, die HTML erwarten. @ user246615 – prM