Desarrollo API Rest-ful (Django and móvil)

J

Voy a llevar a cabo un proyecto, donde desarrollaré una plataforma dinámica. La solución que tengo en mente es:
Desarrollar la parte de backend en python (django) y despues el frontend desde un framework para construir una app híbrida por ejemplo (se que la solución perfecta sería desarrollar apps nativas, con ios y android).

Me gustaría saber que frameworks utilizar para desarrollar una aplicación híbrida son la mejor opción Sobre todo, si quiero usar el hardware del móvil, por ejemplo, el gps.
¿Que me recomendarías?

Además para el funcionamiento de esta API REST, planteo el funcionamiento por si alguien me puede aconsejar o decir si estoy equivocado en algún concepto, Realizaría el backend en con python django y utilizaría por ejemplo Tastypie RESTful API para la realización del front end usando el protocolo JSON para la comunicación.
¿Conoceís más soluciones?

Estoy estudiando un poco las diferentes soluciones,

Gracias por adelantado.

Maldercito

Respecto al desarrollo híbrido te recomendaría React Native. No he hecho una app real aún pero pinta muy bien.

2
O

#1 También te puedes mirar GraphQL en contraposición a una REST API, últimamente esta tirando fuerte.

2
sh31k

Te recomiendo ionic ,

lo he usado en varios proyectos para clientes que querían una solución un poco más económica de ser multiplatform y acaban de sacar su versión 2.0. Si necesitas acceder a geolocalización, camara y demás, no tendrás problemas

1 1 respuesta
Troyer

#1 Tienes claro que la API REST y el cliente front-end son dos proyectos distintos verdad?

1
J

Si @Troyer, veo que lo he puesto algo confuso, utilizando por ejemplo API framework o Django REST framwork para poder comunicar el frontend (android/ios) y el backend usando este webservice.

Zerokkk

Pues verás, eso de que las soluciones nativas son lo mejor... en teoría sí, en la práctica no, ni de putísima coña. Haces bien en tirar de híbridas porque hoy en día tenemos herramientas de puta madre que te harán apps con un rendimiento cercano al nativo, y te llevarán mucho menos tiempo (además de que el mantenimiento del código, más de lo mismo).

Por un lado tienes React Native, mucha gente te la va a recomendar, y ciertamente está genial porque tira sólo de componentes nativos, por lo que la app irá como un tiro. Contrapartida: no te deja tanta manga ancha a la hora de personalizar las cosas, y React tiende a ser coñazo hasta para cosas simples (opinión personal).

La otra opción es Ionic 2, que sacó su versión de producción hace poco. Yo estoy desarrollando una app en éste y la verdad que está genial: tiras de código web de toda la vida, pudiendo usar ES6/Typescript, y con Angular 2, que a mí personalmente me parece un framework bestial. Contrapartida: al menos en mi opinión, Angular 2 no es demasiado fácil de aprender, y algunas cosas de Ionic son más trucos que te vas aprendiendo que otra cosa. Pero vamos, el rendimiento está de puta madre aún sin optimizar una mierda, con más spaghetti que en la Tagliatella y sin activar el modo de producción.

Por otro lado, están Xamarin, Nativescript y cosas así... todo es buscar, herramientas para hacer apps híbridas hay a patadas.

Luego, lo de usar JSON para la comunicación, genial. Es lo lógico. Ya ni dios usa XML a día de hoy o plain-text. Pero te diría que echases un vistazo al tema de la programación reactiva, RxJs y uso de websockets, ya que quizá para alguna cosita de la app te sirva. Por ejemplo, hacer un chat en un setInterval() que mande peticiones http/https al backend, es de mataos, completamente. Con RxJs, te suscribes a un evento, y básicamente será como si estuvieras capturando un evento en el backend o frontend y lo propagaras en tiempo real hacia el otro. Todo ventajas. Hay que saber salir de las típicas request de toda la vida y echarle un vistazo a estas cosas, que quizá te vengan bien dependiendo de los requerimientos de la aplicación.

Como última recomendación, permítete recomendarte que si tiras de Javascript (tanto en RN o Ionic 2 es lo que te tocará), revises un poco Ecmascript 6 / Typescript, ya que mejorarán mucho tu código pese a que luego éste se traspase a versiones más viejas a través de Babel o el transpiler de TS.

También, si usas Ionic 2 y apuntas a SDKs de Android menores a la 4.4.4, échale un ojo a Crosswalk, te hará falta.

Saludetis y suerte. Sólo una pregunta, ¿usas Python+Django porque te gusta, o por alguna razón en particular?

1 2 respuestas
MisKo

Para tema de la app, yo he probado ionic2 y react native, y en este último, me veía algo 'lento' por el tema de la personalización que comenta el compañero anterior.

Al no tener tanta libertad como con HTML directamente, me daba la sensación de que iba más lento. Lo que yo hice fue algo sencillo 2 veces, una con ionic2 y otra con react native, y me quedé con la que mejor sabor de boca me dio (ionic2)

1 respuesta
varuk

#4 Una pregunta sh31k, ¿cambia mucho de ionic 1 al 2? Es que he visto un curso online pero es con el 1... me gustaría hacerlo cuando tenga tiempo para tener un conocimiento básico y no sé si luego ionic 2 es totalmente diferente y cambia la filosofía o algo... ¿Perderé el tiempo en aprender ionic 1 y luego tocar el 2?

2 respuestas
B

#7 #8 Una pregunta sobre lo que decis de personalización en React-Native. Yo actualmente estoy usando sólo React para el desarrollo de "components" renderizando en backend y la verdad la experiencia está siendo una gozada en cuanto a escalabilidad, reutilización de componentes, scoping y tests. A qué os referís realmente con que "no te deja manga ancha"? (pregunto desde la ignorancia eh, no he recibido aún opiniones al respecto)

2 respuestas
Zerokkk

#10 A mí es lo que me llevan dicho mucho, pero no te fíes mucho de mi criterio sobre React, ya que no lo he probado (todavía, porque tengo pensado hacerlo). Unos cuantos devs me han comentado eso, que no tienes tanta posibilidad para hacer cosas como en Ionic 2, pero vamos que ni idea.

Coméntame tu experiencia, ¿te está gustando? ¿Se desarrolla rápido? ¿Qué tal es la curva de aprendizaje? ¿Lleva cambiado mucho últimamente con nuevas versiones? Gracias!

#9 Yo te recomiendo Ionic 2 de lejos, por una sencilla razón: Angular 2 es mucho más lightweight que Angular 1... y también mucho más potente, aunque quizá más difícil de aprender también. Desde luego la mejora en rendimiento es importante, además de que Ionic 2 tira bastante de componentes nativos si sabes utilizarlo.

2 respuestas
B

#11 Pues como te ponía antes mi experiencia está siendo muy buena. Utilizamos React para renderizar desde backend (serverside) y de ahí lo lanzamos a cliente.

Hemos migrado muchas templates complejas en nada de tiempo. Típica template con 100k botones 100k inputs en menos de un día la tenemos en React. Si que hemos tenido que tirar de otras librerías para la comunicación entre diferentes componentes (renderizados en la misma template, pero procedentes de distintos servicios). En este caso hemos probado postaljs para establecer una comunicación de "colas" en frontend, pero lo que es desarrollo a trapo de html reactifizado... volamos en comparación de hacerlo con un MVC de toda la vida.

1 1 respuesta
J

#7 zerokkk primero de todo gracias por las aclaraciones.
Lo que me comentas sobre en websockets si que lo tengo en mente según vaya evolucionando el proyecto, sobre RxJs, la verdad es que no lo conocía y voy a informarme bien para ver en que me puede ayudar.

También miraré todos los conceptos nuevos que me indicas, muy completo tu comentario.

Sobre la utilización de Python, es básicamente porque considero que es fácil y como programo hardware con el también, en un futuro me gustaría poder "mezclar un poco estas dos cosas" (veremos como sale ajajjaja)
Estuve también viendo (informándome) Ruby, Java, PHP y algo más pero después de leer diferentes opiniones, acabe quedándome con Python porque no vi ninguna ventaja q me llamará la atención para cambiar jeje
Que opinas tú para el desarrollo de una plataforma dinámica?

1 respuesta
Zerokkk

#12 Gracias! Súper interesante, a ver si en un tiempo me meto a probar React y React Native.

#13 Pasa olímpicamente de Ruby y PHP. Java sólo para buscar curro, que hay mucho. Todo lo que se hace con Java se puede hacer mejor con Node o Golang, aunque sí que es cierto que tiene cierta solidez como lenguaje y me parece un must a día de hoy conocérselo.

Python yo creo que está bien, pero ojo, si vas a seguir un paradigma de programación orientada a objetos, Python te va a acostumbrar a algunas malas prácticas... pero bueno, es un buen lenguaje y Django dicen que está súper bien, así que está guay si tiras por ahí.

#13javiisanchez:

Que opinas tú para el desarrollo de una plataforma dinámica?

Yo a día de hoy me he acostumbrado a hacer todo en JS, ya sea en backend o en frontend, y me gusta tanto la rapidez de desarrollo y el rendimiento, que por ahora no lo cambio por nada. Pero Golang, por ejemplo, parece ser el futuro del backend.

1 3 respuestas
Martita-

#14
Mi jefe tira de Ruby on rails para hacer backend porque dice que se avanza mucho mas rapido, ya que con un par de comandos tienes practicamente "todo" hecho.

Hay alguna forma de agilizar los proyectos de back end en node?

2 respuestas
J

#14 interesante!!
Si Python te acostumbra a malas prácticas en cuanto a programación orientada a objetos (eso lo he vivido en persona jajaja)

Voy a seguir informándome antes de empezar, comentarte también que ionic2 tiene muy buena pinta, y me lo ha recomendado mucha gente como tú.

Gracias

1
MTX_Anubis

#14 Tengo una duda, por qué hay que pasar de Ruby y PHP y todo lo que se puede hacer con Java se hace mejor con Node y Golang?

1 respuesta
Zerokkk

#17 Me parecen tecnologías lentas y algo obsoletas, honestamente... luego, respecto a lo segundo, pues yo opino que con Java es más fácil hacer una aplicación corporativa, grande, potente y sólida, pero si lo sabes hacer con Node (por ejemplo) correctamente, va a funcionar mejor. No sé si habían sido Yahoo y Amazon las que cambiaron de Java a Node y ganaron un porrón de rendimiento, vaya. Pero sí que es algo más difícil.

Igualmente supongo que todo esto depende mucho de los gustos de cada uno, y que a la hora de la verdad, la diferencia entre unas herramientas y otras es poco notable a menos que estés en un proyecto de gran envergadura o unos requerimientos brutales. Pero por ejemplo la facilidad de desarrollo y facilidad para mantener el código, sí me parecen aspectos fundamentales.

#15 Usa Express para definir los hooks, usa Socket.IO para cosas que requieran de mucho asincronismo, usa webpack 2, utiliza ES6 aunque sea con Babel... las cosas bien hechas en Node se hacen bastante rapidito. Incluso puedes meterle un dashboard bonito a Node para controlar qué tal van las cosas xD.

1 respuesta
Martita-

#18
Un compañero usaba express + sequelice, pero la verdad es que no habia mucha informacion de sequelize por ningun lado.

2 respuestas
Zerokkk

#19 No sé qué es la verdad, pero yo creo que con express y body-parse ya haces casi cualquier cosa a una velocidad envidiable xD.

Maldercito

#19 yo uso sequelize en un proyecto y su documentación es cojonuda, aunque puede que para cosas complejas sea algo lío, no se me ha dado el caso. Respecto a NodeJS yo uso yeoman con un generador y en dos minutos tienes un boilerplate para empezar cojonudo con todo configurado, incluso con comandos para crear componentes, rutas y demás.

s4suk3

#15 https://github.com/ParsePlatform/parse-server

1
MisKo

#10 #11 Sobre lo de React-Native y lo de la personalización, hablando desde mi poca experiencia, es básicamente porque al transformarlo todo a nativo al compilarlo, tienes que hacerte todas las interfaces solo con sus componentes y estás limitado a lo que dichos componentes ofrezcan.

Por esto ultimo, aunque la lista de estilos que soportan es 'amplia' https://facebook.github.io/react-native/docs/layout-props.html , muchos componentes no los soportan todos y hasta que te acostumbras, perderás mucho tiempo intentando hacer cosas imposibles.

En mi caso personal, quería darle unos estilos a un botón y no funcionaba de ninguna manera, a la hora (mas o menos) probé a cambiar el componente button por el componente text, y funcionaban correctamente todos los estilos, era simplemente que el componente button no los aceptaba.

Aun así, las pruebas que hice me gustaron mucho y el rendimiento de las 4 tonterías que había hecho era muy bueno, pero esto de la personalización me dejo un mal sabor de boca y me hacia sentir que avanzaba muy lento.

Si yo me tuviera que dedicar únicamente a hacer aplicaciones móviles, seguramente tiraría por react-native, aunque tardara un poco más en adaptarme.

sh31k

#9 No pierdas el tiempo con Ionic1, básicamente porque en Ionic2 todo es bastante más fácil.

No le deseo ni a mi peor enemigo hacer temas de notificaciones push con ionic1 xDD

1 respuesta
varuk

#24 ok, eso quería saber... si habia cambiado mucho o no. Iré directo al 2. Gracias : )

1