Ho aderito a un progetto dove vendevamo servizi per diversi fornitori tramite app web, iOS e Android. Sto lavorando su iOS. Mi è stato chiesto di visualizzare un modulo di acquisto tramite una visualizzazione Web e reagire in base a quanto inserito in modo nativo. Lo faccio intercettando la comunicazione di rete ma, come puoi immaginare, è lenta, soggetta a errori e semplicemente stupida. Chiedo il motivo per cui deve essere fatto in questo modo, perché non riesco a ottenere i dati e rendere il modulo me stesso in modo nativo, e mi è stato detto che presto anche l'app per Android adatterà questa funzione e il modulo può leggermente cambiare per ogni fornitore quello sarebbe l'approccio più semplice.
Mentre sono d'accordo sul fatto che è più facile decidere sul server quali campi sono necessari per ogni chiamata, non penso che la conclusione logica sia quella di richiedere un modulo html e creare un'intercettazione hacker attorno ad esso.
Prima che l'implementazione per Android inizi voglio proporre un'altra opzione:
Invece di eseguire il rendering di un sito Web, voglio che il server crei un JSON per descrivere il modulo, che può essere facilmente utilizzato sul lato client per creare il modulo. Fondamentalmente un modello di visualizzazione generato dal server.
La mia domanda è: c'è già un "standard" su come dovrebbe essere un JSON simile?
Immagino qualcosa del genere
{
"form": {
"action": {
"action-name": "Send",
"method": "POST",
"target": "https://api.mydomain.com/purchase/"
},
"fieldsets": [{
"fieldset-name": "personal information",
"fields": [{
"field": {
"kind": "text-field",
"field-name": "First Name",
"validator": {
"validator-name": "regex-validator",
"arguments": [{
"regex": ".{3:}"
}]
},
"optional": false
}
}, {
"field": {
"kind": "text-field",
"field-name": "Last Name",
"validator": {
"validator-name": "regex-validator",
"arguments": [{
"regex": ".{3:}"
}]
},
"optional": false
}
}, {
"field": {
"kind": "text-field",
"field-name": "Email",
"validator": {
"validator-name": "email-validator"
},
"optional": false
}
}, {
"field": {
"kind": "text-field",
"field-name": "Confirm Email",
"validator": {
"validator-name": "email-validator"
},
"optional": false
}
}]
}, {
"fieldset-name": "Credit Card Data",
"fields": [{
"field": {
"kind": "text-field",
"field-name": "Credit Card Number",
"validator": {
"validator-name": "creditcard-number-validator"
},
"optional": false
}
}]
}]
}
}