Documentación de Steamworks
Descripción general de la API web

Introducción

Steam tiene una API web basada en HTTP que se puede usar para acceder a muchas características de Steamworks. La API contiene métodos públicos a los que se puede acceder desde cualquier aplicación que pueda realizar solicitudes HTTP, como un cliente de un juego o un servidor. También contiene métodos protegidos que requieren autenticación y que están pensados para el acceso de las aplicaciones de backend de confianza.

Por ejemplo, los servidores seguros de los editores utilizan normalmente los métodos de la API web para:
  • Verificar las credenciales de Steam de un usuario en ese servidor.
  • Comprobar si un usuario posee una aplicación concreta.
  • Establecer u obtener estadísticas, logros o puntuaciones de las tablas de clasificación de un usuario.
  • Efectuar una compra desde el juego.

Puedes ver una lista completa de todo lo que ofrece la API web de Steamworks en la Referencia de la API web de Steamworks.

Formato de solicitud

Para acceder a la API web pública de Steamworks, es necesario enviar solicitudes HTTP (puerto 80) y HTTPS (puerto 443) a api.steampowered.com.
Si eres editor, también puedes acceder al servidor de la API web exclusivo para asociados de Steam en https://partner.steam-api.com. El objetivo de este servicio es tener una mayor disponibilidad que el host público; deberás usar este servicio para todas las solicitudes que hagas desde tus servidores seguros. Consulta el artículo Direcciones de host de la API web y consideraciones sobre firewalls para obtener más información.

De manera similar a la API de C++ de Steamworks, la API web se ha dividido en varias interfaces que contienen métodos relacionados. El formato del URI de cada solicitud de la API es:
https://api.steampowered.com/<interfaz>/<método>/v<versión>/

La mayoría de los métodos admiten una lista de parámetros obligatorios y opcionales. Dependiendo del método, estos parámetros deben pasarse como parámetros GET o POST en la solicitud.

Todas las solicitudes deben enviarse utilizando HTTP 1.1 y una conexión segura TLS siempre que sea posible. El Content-Type debe ser del tipo application/x-www-form-urlencoded y los parámetros POST deben constar en el cuerpo de la solicitud en formato estándar de codificación URL. El texto debe transmitirse en formato UTF‑8.

Autenticación

Muchos métodos de la API web tienen restricciones de acceso que requieren una clave única (consulta Autenticación mediante claves de la API web para obtener más información).

Parámetros de matriz

Algunos métodos están diseñados para recibir una matriz de parámetros. Esto se especifica con el sufijo [0] en el nombre del parámetro. Al pasar matrices, siempre existe un parámetro count que indica el número de parámetros incluidos en la matriz. Por ejemplo:
?count=2&name[0]=SomeNameHere&name[1]=SomeOtherName

Interfaces de servicios

Además de las llamadas normales a la API web, también existen las interfaces de servicios. Estas interfaces funcionan de manera muy similar a las interfaces normales. La diferencia fundamental es que todas las API de servicios aceptan argumentos como un único blob de JSON, además de recibirlos como parámetros GET o POST. Para pasar datos en formato JSON, invoca el método de la API web con el parámetro input_json establecido como:
?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&input_json={"steamid":76561197972495328}

Ten en cuenta que el JSON debe estar en codificación URL. Los campos «key» y «format» deberán seguir pasándose como parámetros independientes, igual que antes. Las solicitudes POST también son compatibles.

Puedes establecer si una API web es un servicio por el nombre de la interfaz. Si termina en «Service», como IPlayerService, entonces es compatible con este método adicional de pasar los datos de los parámetros. Algunos métodos de servicios tienen parámetros con estructuras más complejas y requieren este formato alternativo de entrada.

Ejemplo de consulta

Con el ejemplo siguiente, se obtienen las 3 entradas más recientes de noticias de Team Fortress 2.
La solicitud especifica que el formato de la respuesta devuelta debe ser JSON, e incluye el id. de aplicación (appid) como parámetro obligatorio (440 en el caso de Team Fortress 2) y el parámetro optativo count para limitar el número de resultados devueltos.

GET /ISteamNews/GetNewsForApp/v2/?appid=440&count=3\r\n Host: api.steampowered.com/r/n Content-Length: 0\r\n\r\n

Puedes ejecutar y ver los resultados de esta consulta con este enlace:
https://api.steampowered.com/ISteamNews/GetNewsForApp/v2/?appid=440&count=3

Puedes obtener más información sobre esta llamada aquí: ISteamNews/GetNewsForApp.

Obtención del id. de Steam del usuario

La API web de Steamworks identifica a los usuarios mediante sus respectivos ids. de Steam de 64 bits. Para obtener más información sobre cómo obtener de forma segura el id. de Steam del usuario, consulta Autenticación de usuarios y propiedad.

Direcciones de host de la API web y consideraciones sobre firewalls

La API web pública (api.steampowered.com) está detrás de la caché perimetral de Akamai, por lo que las direcciones IP que se muestran en el nombre varían en función de tu ubicación y los cambios constantes en el servicio. Las direcciones IP pueden cambiar de forma rápida y fluida, por lo que, si realizas llamadas a la API web y las solicitudes salientes deben atravesar un firewall, te recomendamos que sigas leyendo.

Deberías utilizar el nodo exclusivo para asociados (https://partner.steam-api.com) para todas las solicitudes enviadas desde tus servidores seguros. Este host tiene unas propiedades diferentes de las del host público:
  • El host solo está disponible a través de HTTPS.
  • Este host no está detrás de la caché perimetral de Akamai.
  • Para enviar solicitudes a este host, deberás utilizar tu clave de la API web para editores (incluso para las solicitudes con las que normalmente no es necesaria una clave). Las solicitudes hechas sin una clave de editor válida devolverán el código de error 403.
  • Si la solicitud genera el código de estado 403 (lo cual suele ocurrir al utilizar una clave normal de la API web, en lugar de la clave para editores), se limitará de forma estricta la conexión de la dirección IP. Esta es una forma de intentar garantizar la alta disponibilidad.
  • Si vas a enviar solicitudes al servicio de la API desde un host que tenga un filtro del firewall aplicado a las solicitudes salientes, añade el nombre de DNS partner.steam-api.com a la lista de nombres permitidos. Si tu firewall solo acepta direcciones numéricas, añade los bloques de CIDR siguientes a la lista de direcciones salientes permitidas:
    208.64.200.0/22
    155.133.239.0/24
    2602:801:f000::/64
    2602:801:f00f::/64
    2602:801:f00c::/64
NOTA: Utiliza el nombre de DNS (en lugar de la dirección IP) para establecer la conexión con los servidores de la API web. Estas direcciones se proporcionan solo a los clientes que necesitan añadirlas a las listas de direcciones permitidas de sus firewalls.

Listas de direcciones IP permitidas

Es posible definir listas de direcciones IP que tengan permiso para hacer llamadas a la API web, lo cual crea una capa de seguridad adicional en caso de que la clave de la API web sufra algún daño, ya que solamente las direcciones IP listadas podrán realizar llamadas a la API web. Una vez que se añada una IP a una lista de direcciones permitidas, todas las solicitudes de otras direcciones se bloquearán y devolverán un código de error 403.

Es muy fácil añadir direcciones IP a la lista de direcciones permitidas. Desde cualquier página del grupo que tenga una clave de la API web, haz clic en el botón «Administrar clave de API web» y sigue las instrucciones.

Cada clave de la API web tiene su propia lista de direcciones permitidas, pero no es obligatorio añadir direcciones IP a la lista.

Nota: Las listas de direcciones permitidas no garantizan la seguridad de las claves de la API web. Protege tu clave, no la compartas y cámbiala inmediatamente si corre algún peligro.