NOTA: Este sitio es obsoleto. El sitio se desactivará después del 31 de enero de 2023, y el tráfico se redireccionará al nuevo sitio disponible en https://protobuf.dev. Mientras tanto, solo se implementarán actualizaciones en protobuf.dev.

Preguntas frecuentes

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En este documento, se responden algunas preguntas frecuentes sobre el proyecto de código abierto de los búferes de protocolo. Si tienes una pregunta que no se responde aquí, únete al grupo de discusión y pregunta.

General

¿Por qué lanzaste búferes de protocolo?

Existen varios motivos:

  • Prácticamente todos los miembros de Google usan los búferes de protocolo. Tenemos muchos otros proyectos que queremos lanzar como código abierto que utilicen búferes de protocolo, por lo que primero necesitábamos liberar búferes de protocolo. De hecho, algunos aspectos de la tecnología ya están abiertos. Si exploras el código de Google AppEngine, es posible que encuentres parte de él.
  • Nos gustaría proporcionar API públicas que acepten búferes de protocolo, así como XML, porque es más eficiente y porque vamos a convertir ese XML en búferes de protocolo por nuestra parte de todos modos.
  • Pensamos que las personas ajenas a Google podrían considerar útiles los búferes de protocolo.
  • Convertir los búferes de protocolo en un formulario que nos alegraba lanzar fue un proyecto divertido del 20%.

¿Por qué es la primera versión de lanzamiento 2? ¿Qué sucedió con la versión 1?

La versión inicial de los búferes de protocolo (también conocidos como "Proto1") se desarrolló en Google a principios de 2001 y evolucionó a lo largo de los años, por lo que generó nuevas funciones cada vez que alguien las necesitaba y estaba dispuesta a hacer el trabajo por su cuenta. Como todo lo que se haya creado de ese modo, fue un desastre. Llegamos a la conclusión de que no sería posible lanzar el código tal como estaba.

La versión 2 ("Proto2") es una reescritura completa, aunque conserva la mayor parte del diseño y usa muchas de las ideas de implementación de Proto1. Se agregaron algunas funciones y otras se quitaron. Sin embargo, lo más importante es que el código se limpia y no tiene dependencias en las bibliotecas de Google que aún no son de código abierto.

¿Por qué el nombre "Protocol Buffers"?

El nombre se origina desde los primeros días del formato, antes de que tuviéramos que usar el compilador del búfer de protocolo para generar clases para nosotros. En ese momento, existía una clase llamada ProtocolBuffer que, en realidad, funcionaba como búfer para un método individual. Los usuarios agregan pares de etiquetas y valores a este búfer de forma individual llamando a métodos como AddValue(tag, value). Los bytes sin procesar se almacenan en un búfer que se puede escribir una vez creado el mensaje.

Desde ese momento, la parte de los "búferes" del nombre ha perdido su significado, pero sigue siendo el nombre que usamos. Actualmente, las personas suelen usar el término "mensaje de protocolo" para referirse a un mensaje en un sentido abstracto, "búfer de protocolo" para referirse a una copia serializada de un mensaje y "objeto de mensaje de protocolo" para referirse a un objeto en la memoria que representa el mensaje analizado.

¿Google tiene patentes sobre búferes de protocolo?

Actualmente, Google no tiene patentes emitidas sobre los búferes de protocolo, y nos complace abordar cualquier inquietud relacionada con las patentes de protocolo y las patentes que las personas puedan tener.

Tecnologías similares

¿En qué se diferencian los búferes de protocolo de XML?

Consulta la respuesta en la página de descripción general.

¿En qué se diferencian los búferes de protocolo de ASN.1, COM, CORBA, Thrift, etc.?

Creemos que todos estos sistemas tienen fortalezas y debilidades. Google depende de los búferes de protocolo de forma interna y son un componente vital de nuestro éxito, pero eso no significa que sean la solución ideal para cada problema. Debes evaluar cada alternativa en el contexto de tu propio proyecto.

Sin embargo, cabe mencionar que varias de estas tecnologías definen un formato de intercambio y un protocolo de RPC (llamada de procedimiento remoto). Los búferes de protocolo son solo un formato de intercambio. Se pueden utilizar con facilidad para RPC y, de hecho, tienen compatibilidad limitada con la definición de servicios RPC, pero no están vinculados a ninguna implementación o protocolo de RPC.

Contribuyendo

¿Puedo agregar compatibilidad con un nuevo idioma a los búferes de protocolo?

¡Sí! De hecho, el compilador del búfer de protocolo está diseñado de modo que sea fácil escribir tu propio compilador. Consulta la clase CommandLineInterface, que está disponible como parte de la biblioteca libprotoc.

Te recomendamos que crees generadores de código y bibliotecas de entorno de ejecución para lenguajes nuevos. Debes comenzar tu propio proyecto independiente para esto. De esta manera, tendrás la libertad de administrar tu proyecto como mejor te parezca y no será necesario nuestro proceso de lanzamiento. Únete al grupo de discusión de búferes de protocolo para informarnos sobre tu proyecto. Con gusto te ayudaremos a solucionarlo y te ayudaremos con sus problemas de diseño.

¿Puedo contribuir con parches a los búferes de protocolo?

¡Sí! Únete al grupo de discusión de búferes de protocolo y cuéntanos más sobre el tema.

¿Puedo agregar nuevas funciones a los búferes de protocolo?

Tal vez. Siempre nos gustan las sugerencias, pero somos muy cautelosos cuando agregas cosas. Algo que aprendimos a lo largo de los años es que muchas personas tienen ideas interesantes para nuevas funciones. La mayoría de estas funciones son muy útiles en casos específicos, pero si las aceptaras todas, los búferes de protocolo se convertirían en un desorden distorsionado. Tenemos que ser muy exigentes. Al evaluar las funciones nuevas, buscamos adiciones que sean muy útiles o muy simples, o esperamos que sean ambas. Periódicamente, inhabilitamos las funciones que agregan los empleados de Google. Incluso rechazamos regularmente las funciones nuevas de los miembros de nuestro equipo.

Dicho esto, aún nos gustaría saber qué tiene en mente. Únete al grupo de discusión de búferes de protocolo para informarnos. Podríamos ayudarte a encontrar una manera de hacer lo que quieras sin cambiar la biblioteca subyacente. O tal vez decidamos que la función es tan útil o tan simple que debería agregarse.