# Suggerimento: Migrazione da ActiveModelSerializers ad Alba

**URL:** https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266
**Category:** Development
**Created:** [19 Luglio 2022, 8:21am UTC](https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266 "2022-07-19T08:21:06Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![okuramasafumi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/okuramasafumi/32/267513_2.png) [@okuramasafumi](https://meta.discourse.org/u/okuramasafumi)
#### Post date: [19 Luglio 2022, 8:21am UTC](https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266/1 "2022-07-19T08:21:06Z")

</div>

Ciao, ho appena notato che Discourse utilizza una versione precedente di ActiveModelSerializer.  
È stato rilasciato cinque anni fa e non credo che sia una buona cosa.

> <https://github.com/discourse/discourse/blob/main/Gemfile#L58-L62>

Sembra che sia previsto un fork di AMS, ma c’è una soluzione migliore.  
Il mio suggerimento qui è di migrare da AMS ad [Alba](https://github.com/okuramasafumi/alba), un serializzatore JSON che ho creato e mantengo. Sebbene Alba non sia compatibile al 100% con AMS, l’API che offre è simile ad AMS e circa 10 volte più veloce dell’ultima versione di AMS.

Se i manutentori sono d’accordo sulla migrazione, invierò una PR.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [19 Luglio 2022, 10:15pm UTC](https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266/2 "2022-07-19T22:15:06Z")

</div>

> [@okuramasafumi](#):
>
> Se i manutentori concordano sulla migrazione, invierò una PR.

Potresti cambiare 2 o 3 endpoint in PR ed eseguire alcuni benchmark? Questo potrebbe aiutarci a valutarlo 😃

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [20 Luglio 2022, 4:21am UTC](https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266/3 "2022-07-20T04:21:17Z")

</div>

Sì, come ha menzionato Falco, dobbiamo preoccuparci di 2 aree qui:

1. Compatibilità dei plugin: molti plugin estendono i serializzatori, vorremmo ridurre al minimo le modifiche che causano interruzioni

2. Prestazioni: la modifica dei serializzatori deve essere supportata da dati concreti.

Raccomando di esaminare alcuni dei serializzatori coinvolti nelle pagine di argomenti o elenchi di argomenti e di utilizzarli come aree di test:

Quindi utilizzare le cifre “prima” e “dopo” di [discoruse bench](https://github.com/discourse/discourse/blob/main/script/bench.rb). Ti darà una sensazione molto accurata dei progressi compiuti.

La quantità di interruzione dell’ecosistema che siamo disposti ad accettare dipende fortemente dal miglioramento delle prestazioni qui.

---

<div class="post-metadata">

### Author: ![okuramasafumi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/okuramasafumi/32/267513_2.png) [@okuramasafumi](https://meta.discourse.org/u/okuramasafumi)
#### Post date: [18 Agosto 2022, 3:25pm UTC](https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266/4 "2022-08-18T15:25:03Z")

</div>

Mi scuso per la risposta tardiva.

Credo che apporti miglioramenti alle prestazioni, quindi eseguirò uno script di benchmark.

Non ero a conoscenza dei plugin serializzatori. Ho trovato un esempio di plugin che personalizzano il serializzatore.

> <https://github.com/discourse/discourse/blob/e49167b311db1ef6f18c7bfdaf44a552802592d9/plugins/poll/app/serializers/poll_option_serializer.rb#L15-L17>

Qui, il metodo `include_votes?` sembra un metodo magico di AMS poiché non riesco a trovare dove viene utilizzato nel codebase. Penso che abbiamo bisogno di una migrazione in questi casi poiché Alba non supporta questo comportamento.

Mantenere la compatibilità deve essere importante, quindi se non riesco a rendere Alba compatibile con i plugin esistenti, preferisco non procedere.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [18 Agosto 2022, 11:42pm UTC](https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266/5 "2022-08-18T23:42:04Z")

</div>

La magia che stai cercando è `add_to_serializer`. Non è necessario creare un nuovo serializer.

Forse questo ti aiuterà: [Add to serializer only for staff and current user - #7 by paresy](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261/7?u=pfaffman)

---

<div class="post-metadata">

### Author: ![okuramasafumi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/okuramasafumi/32/267513_2.png) [@okuramasafumi](https://meta.discourse.org/u/okuramasafumi)
#### Post date: [19 Agosto 2022, 2:14am UTC](https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266/6 "2022-08-19T02:14:58Z")

</div>

Ah, grazie, sembra che definisca solo alcuni metodi helper che restituiscono se il plugin è abilitato o meno e il corpo del plugin. Penso di poterlo rendere compatibile con Alba, fammici provare.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [19 Agosto 2022, 4:39am UTC](https://meta.discourse.org/t/suggestion-migrating-from-activemodelserializers-to-alba/233266/7 "2022-08-19T04:39:20Z")

</div>

Mi dispiace. Non ho guardato abbastanza attentamente il plugin originale. Penso che il mio suggerimento potrebbe non essere utile come pensavo.

Se stai aggiungendo qualcosa ai serializer esistenti (come aggiungere un campo al serializer dei post), allora ti ho aiutato. Se devi aggiungere una nuova route che restituisce le proprie informazioni, allora dovrai fare qualcos’altro.
