Come fare le request corrette per la paginazione? E le ricerche con filtri?
Il metodo migliore è specificare eventuali richieste di paginazione (es numero pagina, quanti contenuti restituire...) come query param o negli header di richiesta. L'importante è non renderli parte dell'url ma appunto al limite come query param.
La creazione solo di endpoint crud è sufficiente a coprire tutte le necessità di un progetto Api?
Solitamente no. Spesso si rende necessario creare endpoint che non sono lo specchio crud di una entità, ma che scatenano/si legano a specifici processi logici e di business.
Quando torna utile adottare uno sviluppo layered?
Se il nostro impianto API è discretamente complesso e e se parte della logica API potrà essere in futuro usata da altri impianti, conviene allora adottare uno sviluppo a strati.
Nomi entità : singolari o plurali?
Dipende dallo stile che si vuole adottare. Qui le migliori referenze a riguardo: http://www.restapitutorial.com/lessons/restfulresourcenaming.html
Immaginando che due pagine web accedano in get a una api rest per scaricare l' entità CUSTOMER, una però contiene solo un sottoinsieme di attributi, cosa facciamo? Due entità diverse? Usiamo deibparametri di get per specificare le "proiezioni" diverse?
L'endpoint dovrebbe restituire nella sua interezza l'entità completa. E' possibile variare l'output e forse il metodo più corretta è aggiungere un header nella richiesta che informi il server che deve restituire solo una parte della risorsa o un insieme più grande.
In una architettura REST se il client necessità di una risorsa in un determinato range temporale (filtro lato Frontend).... il client dove deve inserire questa informazione?
Sempre come query param o header di richiesta
Come migrare dei webservice al paradigma rest?
Dipende chiaramente dallo stato attuale dei webservices. IL metodo migliore è un refactoring a mano per creare un nuovo impianto API REST sencondo le reali esigenze di business. Altrimenti si possono usare anche strumenti "broker" come AWS API GATEWAY.