Krutius
Verrückter
- Registriert
- 14 Juli 2013
- Beiträge
- 115
Hallo @All_ngb
Ich möchte gerne eine kleine Diskussion zur automatischen Generierung von APIs für Single-Page-Applications, Native Apps, o.ä. anregen, und hoffe auf feedback.
Um es vorweg zu sagen: Ich bin primär ein frontend developer! Beruflich habe ich viel mit emberjs zu tun, jedoch sehr wenig mit moderner serverseitigen Entwicklung. Da habe ich nur mit hochproperitären Sachen zu tun, die mit modernen Konzepten nichts zu tun haben. Entsprechend ist meine Sichtweite geprägt.
Allerdings ist man immer wieder in der Situation, das man sich selber kurz was zusammenbasteln will. Dann suche ich jeweils nach einem simplen Framework, mit dem ich möglichst einfach eine API zusammenbauen kann. Dabei ist einerseits erstaunlich, wie simpel inzwischen alles ist, anderseits was dann doch nicht gelöst zu sein scheint.
Heute habe ich einen genaueren blick auf sailsjs geworfen. Generell habe ich das jedoch auch schon bei anderen Frameworks festgestellt.
Ich kann innerhalb von Minuten eine kleine Datenstruktur erstellen, und habe dank blueprints & co eine funktionierende API. Selbstverständlich hat die auch schon jemand für ember.js angepasst. Und selbst wenn nicht, eine einfache generische Transformation ist ja kein (grosses) Problem. Ein Traum!
In den letzten Jahren hat sich auch was die Authentication angeht einiges getan. Auch durch die Verbreitung von OAuth 2.0 hat sich doch überall ein `best-way` etabliert. Mit policies steht in sails auch ein weg zur Verfügung sehr schnell konfigurativ rechte anhand des session status zu setzen. Regeln à la "dürfen jetzt nur die User lesen und nur die admins bearbeiten" sind in Sekunden erstellt. Allerdings nur auf per-modal level! Und hier beginnt mein Gedanke:
Mir scheint das es drei Arten an multiuser-CRUD-Applicationen gibt:
1) Die Daten sind (fast) alle global. Das typische Blog-Beispiel. Die Rechte an den Daten sind (fast) alle auf Model level konfigurierter. Das Userprofil ist die unschöne Ausnahme. Ansonsten haben alle User die gleichen Daten. Die gleichen Blog-Posts, die gleichen Kommentare etc. Zwar dürfen nur Admins neue Blog-Posts erstellen, und nur User Kommentare schreiben, aber generell sind es die gleichen Daten für alle.
Diese Fall kann man mit sails & co sehr sehr schnell abbilden. Für die Ausnahmen muss natürlich Code geschrieben werden, aber das ist kein grosser Aufwand.
2) Die Daten sind manchmal per-user, manchmal global. Z.B. ein Forum. Sicherlich der komplexeste Fall, und hier wird man um viel custom code denke ich nicht herumkommen.
3) Die Daten sind (fast) alle per-user. Und das scheint mir der Fall zu sein, der einerseits automatisch lösbar wäre, es allerdings nirgendwo ist. Wenn ich eigentlich eine Single-User Applikation habe, die aber quasi mehrmals, pro User einmal, existiert. Die User sind komplett voneinander isoliert. Für die (wenigen) Ausnahmen kann ich custom code schreiben. (Statistiken für den Admin o.ä.)
Als Beispiel geht eigentlich alles, was klassisch eine Desktopapplikaton wäre. Also z.B. mein individuelles Notizbuch. Wenn ich eine Liste von allen Notizen will, meine ich alle meine Notizen. Bei Tags, Erinnerungen, Notizbüchern, etc das gleiche.
Mir scheint das ein scaffolding hierfür eigentlich möglich wäre. Nur warum wird es nirgendwo gemacht?
Ein `sails generate api note --per-user` scheint simpel!
Einfach bei entsprechenden Models immer eine Prüfung auf die User-ID in der Session (session-management ist ja schon lange überall dabei) machen.
Soweit ich gesehen habe gibt es auch nichts vergleichbares für Microsoft asp.NET MVC, Rails, oder sonst einen Stack.
Aus meiner Sicht scheint dies, dank ständiger Verschiebung von Desktopapplikationen ins Web und auf Apps ein logisches Bedürfnis. Wie steht ihr dazu? Habt ihr euch auch schon mal sowas gedacht? Würdet ihr von einer Lösung von Fall 3 auf euren Stack profitieren? Gibt es eventuell schon etwas das ich übersehen habe? Gibt es grundsätzliche Probleme die ich übersehen habe?
MfG
Krutius
Ich möchte gerne eine kleine Diskussion zur automatischen Generierung von APIs für Single-Page-Applications, Native Apps, o.ä. anregen, und hoffe auf feedback.
Um es vorweg zu sagen: Ich bin primär ein frontend developer! Beruflich habe ich viel mit emberjs zu tun, jedoch sehr wenig mit moderner serverseitigen Entwicklung. Da habe ich nur mit hochproperitären Sachen zu tun, die mit modernen Konzepten nichts zu tun haben. Entsprechend ist meine Sichtweite geprägt.
Allerdings ist man immer wieder in der Situation, das man sich selber kurz was zusammenbasteln will. Dann suche ich jeweils nach einem simplen Framework, mit dem ich möglichst einfach eine API zusammenbauen kann. Dabei ist einerseits erstaunlich, wie simpel inzwischen alles ist, anderseits was dann doch nicht gelöst zu sein scheint.
Heute habe ich einen genaueren blick auf sailsjs geworfen. Generell habe ich das jedoch auch schon bei anderen Frameworks festgestellt.
Ich kann innerhalb von Minuten eine kleine Datenstruktur erstellen, und habe dank blueprints & co eine funktionierende API. Selbstverständlich hat die auch schon jemand für ember.js angepasst. Und selbst wenn nicht, eine einfache generische Transformation ist ja kein (grosses) Problem. Ein Traum!
In den letzten Jahren hat sich auch was die Authentication angeht einiges getan. Auch durch die Verbreitung von OAuth 2.0 hat sich doch überall ein `best-way` etabliert. Mit policies steht in sails auch ein weg zur Verfügung sehr schnell konfigurativ rechte anhand des session status zu setzen. Regeln à la "dürfen jetzt nur die User lesen und nur die admins bearbeiten" sind in Sekunden erstellt. Allerdings nur auf per-modal level! Und hier beginnt mein Gedanke:
Mir scheint das es drei Arten an multiuser-CRUD-Applicationen gibt:
1) Die Daten sind (fast) alle global. Das typische Blog-Beispiel. Die Rechte an den Daten sind (fast) alle auf Model level konfigurierter. Das Userprofil ist die unschöne Ausnahme. Ansonsten haben alle User die gleichen Daten. Die gleichen Blog-Posts, die gleichen Kommentare etc. Zwar dürfen nur Admins neue Blog-Posts erstellen, und nur User Kommentare schreiben, aber generell sind es die gleichen Daten für alle.
Diese Fall kann man mit sails & co sehr sehr schnell abbilden. Für die Ausnahmen muss natürlich Code geschrieben werden, aber das ist kein grosser Aufwand.
2) Die Daten sind manchmal per-user, manchmal global. Z.B. ein Forum. Sicherlich der komplexeste Fall, und hier wird man um viel custom code denke ich nicht herumkommen.
3) Die Daten sind (fast) alle per-user. Und das scheint mir der Fall zu sein, der einerseits automatisch lösbar wäre, es allerdings nirgendwo ist. Wenn ich eigentlich eine Single-User Applikation habe, die aber quasi mehrmals, pro User einmal, existiert. Die User sind komplett voneinander isoliert. Für die (wenigen) Ausnahmen kann ich custom code schreiben. (Statistiken für den Admin o.ä.)
Als Beispiel geht eigentlich alles, was klassisch eine Desktopapplikaton wäre. Also z.B. mein individuelles Notizbuch. Wenn ich eine Liste von allen Notizen will, meine ich alle meine Notizen. Bei Tags, Erinnerungen, Notizbüchern, etc das gleiche.
Mir scheint das ein scaffolding hierfür eigentlich möglich wäre. Nur warum wird es nirgendwo gemacht?
Ein `sails generate api note --per-user` scheint simpel!
Einfach bei entsprechenden Models immer eine Prüfung auf die User-ID in der Session (session-management ist ja schon lange überall dabei) machen.
Soweit ich gesehen habe gibt es auch nichts vergleichbares für Microsoft asp.NET MVC, Rails, oder sonst einen Stack.
Aus meiner Sicht scheint dies, dank ständiger Verschiebung von Desktopapplikationen ins Web und auf Apps ein logisches Bedürfnis. Wie steht ihr dazu? Habt ihr euch auch schon mal sowas gedacht? Würdet ihr von einer Lösung von Fall 3 auf euren Stack profitieren? Gibt es eventuell schon etwas das ich übersehen habe? Gibt es grundsätzliche Probleme die ich übersehen habe?
MfG
Krutius