Also baue ich eine App, in der ich ein Backend in Rails und einen Client in Vue mit Amplify geschrieben habe. Meine Datenbank ist MySQL und ich verwende AWS AppSync mit GraphQL als Datenquelle (zeigt auf meine Datenbank).
AWS Amplify verfügt über ein Framework, mit dem ich die Schemas basierend auf den Tabellennamen und Spalten mit einem einfachen Befehl generieren kann: amplify api add-graphql-datasource
. Da ich jedoch Rails-Migrationen verwende, verwendet meine Datenbank Rails-Konventionen: pluralisierte Tabellen mit Spalten mit Schlangengehäuse.
Das Problem dabei ist, dass die GraphQL-Schemata alle hässlich sind und nicht die richtigen Konventionen verwenden (singuläre Namen für die Typen und Eingaben mit Requisiten im Kamelgehäuse). Beispiel:
Mein Backend hat folgende Migration:
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :posts do |t|
t.belongs_to :site, null: false
t.string :title
t.string :url
t.text :body
t.timestamps
end
end
end
Und das dafür generierte Schema lautet:
type posts {
id: Int!
site_id: Int!
title: String
url: String
body: String
created_at: AWSDateTime!
updated_at: AWSDateTime!
}
type Query {
getPosts(id: Int!): posts
listPostss: [posts]
// ...
}
schema {
query: Query
// ...
}
Ganz zu schweigen davon:
input CreatepostsInput {
id: Int!
site_id: Int!
title: String
url: String
body: String
created_at: AWSDateTime!
updated_at: AWSDateTime!
}
AWS Amplify ist also neu, es ist nicht ausgereift wie Rails, und außerdem habe ich keinen Adapter oder Transformator gefunden, um das Problem im Client zu lösen. Ich hoffe, einen Weg zu finden, um es auf Rails zu lösen.
Ich muss in der Lage sein, die Rails-Konventionen vollständig zu ändern, ohne etwas zu beschädigen: Migrationen, Assoziationen, Verwalten von Assoziationen (create_xxx, build_xxx).
Diese App ist wirklich neu, so dass ich alle Migrationen von Grund auf neu erstellen kann.
Vielen Dank
quelle