Olá a todos! Meu nome é Artyom Peskishev, sou desenvolvedor iOS no Avito. Quero contar como começamos um script orientado por back-end para publicar novos anúncios em nossos aplicativos para celular.
Vamos ver o que há scripts passo a passo nos aplicativos e quais problemas tivemos com o script para colocar um anúncio. O artigo é sobre uma ferramenta que desenvolvemos para resolver esses problemas e os resultados de sua implementação.

Interface do usuário orientada por back-end
Backend-driven UI —   ,     , ,   , ,  .
Backend-driven UI    ,   .  ,  . , .    .  , .
 backend-driven  —  backend-driven UI.
 
 — ,   .  — . : , Wi-Fi, Apple ID.   .

  — . , MyFitnessPal, .   ,  .

  .   «». . ,  . ,  ,   ,   « ».    .

   « ». , , .   ,   . ,   « ».
   .   .      ,  , .
,    .    ,  . ,   .  ,   QA-. .
,   . , , .     , . , .
,   ,  , , .   . -     .  .  iOS, Android,  Desktop .

,   ,   . .
:
-   .
-   .
-  
  «».   :
- Select    .
- Input    .
- Address  .
- Photos  .
- Bool     .
 .   , ,      . ,   , . , , .
  «» ,  .   .
  .  — ,   .
,  — , .   . , , ,  . ,    ,   .    —   -.
 — . -     . select.      .  ,   . ,   , .
 — .   ,   .
   — . ,  . , ,   .   .
. , .   « », .  ,  .  ,     «».
,   « »  . . .
    «». VIN, VIN   .    18  .
,   , , , ,   .   - , ,   . , .
,   :
-   , ?
- ?     ,   . ,    — , , .     .
- ?   , . .
, .   ,   -.     .
:
- Pretend,    , .
- .  , .
- .   .
, backend-driven UI   ,   .
 
: , .
 — UI-   . ,   , .   . :   , , .
 "steps": [{
            "id": 1133,
            "title": " ",
            "fields": [],
            "type": "wizard"
        }, {
            "id": 1169,
            "title": " ",
            "fields": [],
            "type": "request",
            "subtype": "steps",
       }, {
            "id": 1168,
            "title": "",
            "fields": [499],
            "type": "params"
        }, {
            "id": 1134,
            "title": "VIN ",
            "fields": [838],
            "type": "vin"
       }, {
            "id": 1163,
            "title": " ",
            "fields": [549, 498, ...],
            "type": "params"
        },
        {...}]
  .   ,   .     ,  .
, . ,   «», . , , .   , ,   "value" .   — iOS, Android .
  .

DynamicPublish , ,   , .
,  — .  DataService,  ,   - -, .   .
 — StepHandler.  ,  ,   .
StepHandler, . , Wizard — StepHandler,   . Steps -. Select . Params   .
. -, .    . , , «»   .
 StepHandler. StepHandler  - ,  .   .
, «»,   , . , «».
. StepHandler   . -  — , ,   . n  ,    — , .
  . ,   , , .   . -  , .
.      .  — , , . , ,   , , , . . .
42   ,   .     .

 —   . , . ,   , .
    . /-  .
. ,   .
  .   . ,  — . , , , .
. , .      — . , MVP ,   .    , , .