-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
REST API: Schemas in Add- und Edit-Szenarien verfügbar machen #5968
Comments
We propose the following: New alternative invocation syntax for vocabulary-like endpointsThe Vocabulary-like endpoints ( When this parameter is supplied, they should assume add intent, and treat the context they're invoked on as a Their existing invocation syntax would imply edit intent. For the new invocation syntax to signal add intent, we propose that these endpoints accept an additional positional path parameter.
(Where These endpoints would therefore have the following invocation styles and corresponding intents: Or, as more concrete examples when requesting the vocab or source for a field on a document that is either to be created in a folder (add) or already exists (edit):
New
|
Abwarten der Anpassung im og.core und evtl. Diskussion in p.a.restapi. |
In
plone.restapi
ist neu eine Implementierung für einen@sources
endpoint vorhanden, aber diese kann erst für Edit-Formulate gebraucht werden, noch nicht für Add.Der Grund dafür ist, dass der
@sources
endpoint auf einem Kontext aufgerufen werden muss, und die Source über den Namen des Feldes adressiert werden muss:GET (context)/@sources/(field_name)
Dieser Aufruf funktioniert aber nur, wenn das Objekt bereits existiert, für welches die Source abgefragt werden soll.
Für Add-Formulare muss die Source stattdessen den container als Kontext erhalten, und das Schema kann nicht vom Kontext bestimmt werden (da er noch nicht existiert), sondern muss über einen vom Benutzer anzugebenden Typ nachgeschaut werden.
Für ein Add-Szenario würde ich daher folgenden Aufruf vorschlagen:
GET (container)/@sources/(portal_type)/(field_name)
Für ein Add-Formular würde der
@sources
endpoint also auf dem container aufgerufen, zu welchem das neue Objekt hinzugefügt werden soll. Zusätzlich muss mit dem zweiten Pfad-Parameterportal_type
angegeben werden, welcher Typ erstellt werden soll.Aufgrund des
portal_types
wird der endpoint dann die FTI, und das Schema des Typs nachschlagen, mittels dem Angegebenenfield_name
das Feld bestimmen, und die Source des Feldes im Kontext des containers rendern.Der
@types
endpoint müsste in einem ähnlichen Stil angepasst werden:Die Vocabulary-URLs in den vom
@types
endpoint zurückgegeben Schemas müssten so angepasst werden, dass sie je nach Aufruf-Art des@types
endpoints auf Vocabularies/Sources für add forms oder edit forms verlinken.Leider ist aber der Aufruf des
@types
endpoints ohne parameter auf einem Kontext schon belegt mit Funktionalität, welche überhaupt nichts mit Schemas zu tun hat:context/@types
ohne weitere Argumente liefert die Liste der verfügbaren Typen zurück, mit der Information ob sie addable sind. Diesen Aspekt des Endpoints darauf zu Ändern, das Edit-Schema für den entsprechenden Kontext zurückzugeben, wäre ein Breaking change.Ich würde daher vorschlagen, einen neuen Endpoint
@schema
einzuführen, der ausschliesslich Schemas ausliefert:Intent: Edit
GET (context)/@schema
Intent: Add
GET (container)/@schema/(portal_type)
Auch hier würde also implizit, durch Vorhandensein oder Abwesenheit des
portal_type
Parameters, bestimmt ob es sich um ein add oder edit-Szenario (Intent) handelt. Der@schema
endpoint würde in den URLs für die Vocabularies/Sourcen diesen Intent erhalten, indem er denportal_type
Parameter an die enstprechenden endpoints weitergibt (dazu müssen diese den natürlich unterstützen, und sich analog verhalten).The text was updated successfully, but these errors were encountered: