Optimización de las funciones de la API de EC OData

Análisis del rendimiento de la API de EC OData

Objective

After completing this lesson, you will be able to identifique qué tipo de herramientas de API están disponibles en SAP SuccessFactors Employee Central.

Introducción

El siguiente contenido cubre un resumen de los aspectos básicos de la API de EC OData.

Webinar grabado: Funciones de API de EC OData

Cliente de prueba

Presentaremos 3 clientes de prueba para la API EC OData. El primero es Soap UI, se puede utilizar tanto para SOAP como para REST, y permite la creación de scripts de prueba complejos, incluidas las pruebas de carga. El segundo es el JMeter, también se puede utilizar para SOAP y REST/OData. El último es el cliente Firefox Rest y se puede utilizar para cualquier API basada en Rest, incluido OData.

IU SOAP

  • Consíguelo aquí:API Testing Tool | SoapUI
  • Se puede utilizar para SOAP y Rest/OData
  • Permite la creación de scripts de test complejos, incluidos los tests de carga

JMeter

Complemento de Firefox Rest Client

  • Consíguelo aquí: Firefox RESTClient
  • Se puede utilizar para cualquier API basada en descanso, incluido OData

Autenticación básica

Como sabemos, existirá la autenticación de identidad cuando llamemos a la API de OData, podemos llamarla Autenticación básica. En términos generales, enviamos autenticación con la cabecera https por el parámetro Autorización. La cadena de codificación base 64 username@companyId:passwordcombina con la palabra Basic y un espacio delante. (De hecho, todos los clientes de prueba nos proporcionarán el parámetro Autorización, solo necesitamos establecer el nombre de usuario@companyId y la contraseña, luego la cadena de código Base 64 se creará automáticamente según su entrada en la Autorización.)

  1. Enviar autentificación con la cabecera http mediante el parámetro Authorization
  2. base64 Codifique la cadena user@company:password (por ejemplo, admin@ACE123:secret).
  3. Combinado con la palabra Basic y un espacio delante de ella
  4. Codificador Base64 disponible en notepad++
Ejemplo de consulta SAP para el filtrado de recursos PerPersonal por ID de persona externa, que muestra la solicitud GET con la cabecera Autorización básica.

OAuth con aserciones SAML

Consulte la documentación de OData

Operaciones y recursos

HTTP GET, PUT, POST, DELETE

La API de OData admite algunas operaciones http, como GET, POST, PUT, PATCH y DELETE, utilizamos las operaciones básicas para obtener o editar entidades como Usuario, PerPerson, lista desplegable, etc. en EC

Operaciones HTTP

  • GET: Consulta
  • POST: Crear
  • PUT: Actualizar
  • PATCH: Actualización parcial
  • DELETE: Borrar

Recursos o servicios HTTP

  • Usuario, PerPerson, lista desplegable, posición

Parámetro HTTP

  • Separado por "?" (primero después de Recurso) y "&" caracteres
  • Los parámetros estándar de OData empiezan con un carácter "$", como $filter o $select

Definición XML de metadatos API

  • Se puede recuperar mediante la API de OData $metadata y se puede importar un resultado después de descargarlo en Excel:

Para obtener información adicional, como etiquetas de idioma, listas desplegables, más allá de lo que proporcionan los metadatos OData estándar, OData de SAP SuccessFactors expone metadatos como una entidad. La API de OData de SAP SuccessFactors expone una entidad llamada "Entidad". Sus propiedades se exponen como valor de tipo complejo incrustado en el cuerpo de respuesta de "Entidad". Por lo tanto, se pueden exponer diferentes formas de metadatos sin modificar el formato de metadatos OData estándar. Puede acceder a los nuevos metadatos del mismo modo que accedería a una entidad normal. Además, admite un filtro simple para emitir metadatos de una entidad específica.

Los metadatos se pueden obtener mediante la API de OData mediante $metadata en la llamada https. Puede solicitar los metadatos a través de Firefox Rest Client. Dado que los datos son un poco grandes para los metadatos, la solicitud puede tardar más tiempo.

Solicitud de SAP oData para metadatos con método GET que muestra la cabecera Autorización básica en la sección de cabeceras de solicitud.

Metadatos de API: carga en Excel

Funciones de la API de OData

Funciones de API de OData - $format

Seleccione el botón de reproducción para obtener información sobre el parámetro $format.

Funciones de API de OData: $filter y $select

Opciones y parámetros de filtro

El siguiente ejemplo muestra un ejemplo de consulta de la API de OData mediante filtro y seleccione. Para el filtro podemos dar un valor especificado a un campo para consultar en la entidad correspondiente. Para la selección también podemos definir los campos para devolver la respuesta.

  • $filter=personIdExternal%20eq%20’greinhard’
    • %20 es un carácter de escape especial para espacio; como %28 y %29 para paréntesis como "(" y ")"

    • Los operadores disponibles son EQ,NE,GT,GE,LT,GT y se pueden combinar con NOT, AND y OR

  • $select=firstName define los campos que se devolverán separados por espacios

Solicitud SAP oData GET consultando el recurso PerPersonal.

Funciones de la API de OData - $expand

En el siguiente ejemplo se muestra cómo utilizar el parámetro de expandir. Despliegue siempre utilizado para navegar a otra entidad.

Solicitud SAP oData GET que solicita al recurso PerPersonal el nombre y la fecha de nacimiento, filtrados por ID de persona externa.

Expandir los datos: navegar por el modelo de datos

  • $expand=personNav
  • $select=firstName,personNav
    • despliega firstName en el recurso raíz y todos los campos en la persona del recurso navegada

  • $select=firstName,personNav/dateOfBirth

    • despliega firstName en el recurso raíz y todos los campos en la persona del recurso navegada

Respuesta JSON que muestra los detalles de recurso PerPersonal: nombre Gerald y fecha de nacimiento como objeto de fecha JSON.

Funciones de la API de OData: $expand y $filter

Solicitud SAP oData GET consultando el recurso PerPersonal.

El ejemplo anterior nos muestra cómo utilizar el parámetro de $expand y $filter

La respuesta identifica un conjunto de entidades de usuario cuya propiedad personNav/emailNav es emailAddress que es igual a gerald.reinhard@sap.com. Después de recuperar las entidades, la respuesta elimina las columnas no seleccionadas. A continuación, la opción $deploy despliega las columnas seleccionadas que es una propiedad de navegación

Filtrado profundo mediante $filter y $expand

  • $expand realizado después del filtro independientemente el uno del otro (ver el resultado de la siguiente diapositiva)
  • $select no es necesario para los atributos filtrados
Solicitud SAP oData GET consultando el recurso PerPersonal.

Filtrar+Desplegar

  • Filtro aplicado al recurso raíz
  • Desplegar aplicado a recurso raíz filtrado
  • Resultado: el correo electrónico expandido no coincide con el filtro
Respuesta JSON que muestra el recurso PerPersonal.

Funciones de la API de OData: tratamiento de fechas

Solicitud SAP oData GET consultando el recurso EmpJob.

El siguiente contenido describe cómo consultar entidades con fecha efectiva, para utilizar fromDate y toDate devolverá todos los datos históricos de la entidad raíz en la respuesta. Pero si la entidad raíz no es una fecha efectiva, fromDate y toDate se aplicarán a la siguiente entidad con fecha efectiva en la jerarquía de navegación, y se devolverán todos los registros con fecha efectiva que caigan en el intervalo de tiempo entre fromDate y toDate.

Además, si se devuelven datos históricos de un registro con fecha efectiva y se realiza una navegación/expansión de esos registros a otro registro con fecha efectiva, se utilizará la fecha de inicio de la primera entidad con fecha efectiva para filtrar el segundo.

toDate y fromDate

  • Para que las entidades con fecha efectiva le indiquen a la API que devuelva todos los datos históricos de la entidad raíz en la respuesta.
  • Si la entidad raíz no tiene fecha de entrada en vigor toDate y fromDate se aplicará a la siguiente entidad con fecha de entrada en vigor en la jerarquía de navegación:
    • https://salesdemo4.successfactors.com:443/odata/v2/PerPerson? $filter=employmentNav/jobInfoNav/userId%20eq%20'greinhard‘ &fromDate=1900-01-01 &$select=employmentNav/jobInfoNav/startDate,employmentNav/jobInfoNav/departmentNav/externalCode &$expand=employmentNav/jobInfoNav/departmentNav/departmentNav
  • Se devolverán todos los registros con fecha efectiva comprendidos en el intervalo de tiempo entre fromDate y toDate.

Combinación de toDate y fromDate y navegación

  • Si se devuelven datos históricos de un registro con fecha efectiva y se realiza una navegación/expansión de esos registros a otro registro con fecha efectiva, se utilizará la fecha de inicio de la primera entidad con fecha efectiva para filtrar el segundo.
    • https://salesdemo4.successfactors.com:443/odata/v2/EmpJob? $filter=userId%20eq%20'greinhard'&fromDate=1900-01-01 &$select=startDate,departmentNav/externalCode &$expand=departmentNav

Describe cómo consultar entidades con fecha efectiva para utilizar fromDate y toDate devolverá todos los datos históricos de la entidad raíz en la respuesta. Pero si la entidad raíz no es una fecha efectiva, fromDate y toDate se aplicarán a la siguiente entidad con fecha efectiva en la jerarquía de navegación, y se devolverán todos los registros con fecha efectiva que caigan en el intervalo de tiempo entre fromDate y toDate.

Además, si se devuelven datos históricos de un registro con fecha efectiva y se realiza una navegación/expansión de esos registros a otro registro con fecha efectiva, se utilizará la fecha de inicio de la primera entidad con fecha efectiva para filtrar el segundo

Utilizar las últimas consultas modificadas para recuperar registros modificados para cargas delta

  • Eliminaciones parciales no admitidas para entidades sin fecha efectiva como PerEmail, PerPhone
  • La eliminación completa aún no es compatible con ninguna API
  • lastModifiedOn (huso horario del servidor) lastModifiedDateTime (UTC)
Filtrado de consulta SAP oData FODepartment.

Funciones de la API de OData: paginación

  • La API de OData proporciona varias opciones de paginación para los resultados de la consulta.
  • Una única solicitud HTTP GET de OData puede devolver como máximo 1.000 registros. Esto es razonable porque la mayoría de los clientes HTTP tienen un límite de tiempo de espera de 2 a 5 minutos.
  • Una solicitud que se ejecuta durante más tiempo del límite obtiene un error de tiempo de espera HTTP. Por lo tanto, a menudo es necesario ajustar consultas complejas y reducir el tamaño de los datos para que se completen dentro de la restricción de tiempo de espera.

El cliente puede elegir entre dos tipos de paginación:

  • Paginación de cliente
  • Paginación del servidor
  • La paginación de cliente es el mecanismo de paginación más fundamental. Utiliza opciones de consulta en el lado del cliente para crear un "offset" que restringe la cantidad de datos devueltos por el servidor. Un cliente utiliza el siguiente parámetro URI.
  • Un cliente utiliza el siguiente parámetro URI:
    • El parámetro $top indica el número de registros que se devolverán en el lote. El número predeterminado y máximo es de 1.000 registros.
    • El parámetro $skip indica el número de registros en el conjunto de datos completo que se omitirá antes de obtener los datos.
  • Por ejemplo, una consulta con $skip=2000&$top=500 devuelve la quinta página de datos donde el tamaño de página es 500.
Solicitud SAP oData GET para recurso EmpEmployment.
  • A diferencia de la paginación de cliente, donde la paginación se controla mediante parámetros especificados por el cliente, la paginación del servidor se controla en el lado del servidor.
  • Existen dos tipos de paginación de servidor: paginación basada en cursor y paginación basada en instantánea. Ambos tipos de paginación devuelven un parámetro "__next" al final de cada respuesta de consulta que contiene un valor $skiptoken que indica la siguiente página de datos.
  • La paginación basada en cursores mantiene un "cursor" de base de datos en el servidor a lo largo de las solicitudes HTTP de paginación. El cursor representa un puntero al inicio de la página siguiente en el conjunto de datos completo. Esto se activa mediante el parámetro &paging=cursor URI.
  • La paginación de instantáneas funciona guardando de forma persistente una lista de todas las claves empresariales del conjunto de datos en el servidor. Esto se activa mediante el parámetro URI &paging=snapshot.

Cuándo utilizar los diferentes tipos de paginación:

  • Para el consumo de IU, utilice la paginación de offset de cliente. Este es el único método admitido en la IU.
  • La paginación basada en cursores y la paginación basada en instantáneas se recomiendan para los casos de uso de integración.
  • Le recomendamos que ajuste sus consultas cuando utilice la paginación basada en instantáneas. Si tiene problemas con el rendimiento de la primera página para conjuntos de datos extremadamente grandes, cambie a la paginación basada en cursores, si procede.

Por último, hemos optimizado las entidades OData FOLocation y FOPayGrade para la paginación basada en instantáneas para mejorar el rendimiento.

Otras funciones

Algunas funciones básicas adicionales

  • $top y $skip para paginación basada en consumidor
  • Operador IN en filtros
  • Entidad y $metadata en entidad
  • Importaciones de funciones de flujo de trabajo
  • Actualización de metadatos como API

Se puede aplicar un filtro para que en las consultas de la API de OData de EC pueda excluir datos de usuario externos (no de EC).

Para que esto sea posible, se pueden seleccionar los siguientes campos booleanos y utilizarlos con $filter;

  • isECRecord para EmpEmployment e includeAllRecords para EmpEmployment, PerPersonal, PerAddressDEFLT, PerPerson, PerEmail, PerPhone.
  • Anteriormente, el comportamiento predeterminado era excluir datos de usuario que no eran de EC de EmpEmployment y PerPersonal, pero ahora puede sustituir este comportamiento utilizando estos nuevos campos en su consulta.

Hemos introducido el concepto de un UUID de persona (identificador universal único) para toda SAP SuccessFactors HXM Suite; cuando se crea un nuevo empleado contratado o usuario, el sistema genera este identificador llamado "perPersonUuid". perPersonUuid le permite exponer el UUID de persona para escenarios de integración e importación para todos los empleados (empleados de EC y no EC).

El campo es visible y upsertable en PerPerson, pero no se puede consultar a través de esta entidad. Para que perPersonUuid esté disponible en OData, hemos creado una nueva entidad PersonKey. Esta entidad no se puede consultar directamente, pero puede utilizar $expand con personKeyNav en la entidad Usuario para exponer el perPersonUuid. personKeyNav se expone independientemente de la configuración del modelo de datos, la autorización basada en función o las opciones de aprovisionamiento.

Mejores prácticas y ajuste de API

Práctica recomendadaNotas adicionales
Utilizar la paginación del servidor de instantáneas para casos de uso de integraciónSi no se utiliza la paginación del servidor, puede experimentar pérdida de datos o duplicados en su conjunto de resultados si se realizan ediciones simultáneas en la instancia de la empresa. La instantánea a menudo también da como resultado mejoras drásticas en el rendimiento.
Utilice "paginación de servidor" para garantizar un conjunto de resultados estableConsultar solo registros modificados desde su última ejecución en lugar de consultar todos los registros para casos de uso de integración.
No intente simular en tiempo real ejecutando jobs con demasiada frecuenciaConsultar por períodos mucho menos de una hora usará demasiados recursos de API y podría acelerarse en el futuro. Ejecutar consultas cortas de 1/minuto puede resultar en una situación de denegación del servidor de servicio, especialmente para consultas complejas que requieren un gran procesamiento de back end.
Reutilice una sesión de inicio de sesión en lugar de crear una sesión para cada transacción http o cada página de datos paginados. 
Uso de una API para la integración que solo está diseñada para un solo usuarioEjemplo: Iteración entre todos los usuarios y creación de una sesión para cada usuario.

Un ejemplo de esto es la API SFOData.Todo que solo permite consultar datos para un único usuario.

La solución correcta es utilizar la nueva autorización "Todo Exportar" de TodoEntryV2.

Añadir siempre verificación de errores para operaciones de edición

Verifique cada elemento de la respuesta. Registre las respuestas de error completas en su registro de cliente.

Nota: No confíe en los registros de auditoría del Centro de API para comprobar si hay errores.

Evitar un tamaño de página demasiado pequeño para los datos paginados

Debe ajustar los tamaños de lote para que sean lo más grandes posible.

Nota: Hay un máximo de 1000 tamaños de página. Para transacciones más complejas, es posible que deba reducir este valor para evitar tiempos de espera http.

Evitar sentencias $expand de OData de gran tamaño

Un ejemplo de esto es un intento de consultar todas las JobRequistions y, a continuación, expandir todas las JobApplications y todos los adjuntos para cada aplicación.

Nota: Esto expande mi capacidad de estrangularse en el futuro, donde se puede devolver un error "Demasiado Complejo" o "Demasiado grande".

Evite un rendimiento deficiente manteniendo las transacciones simples.Un rendimiento deficiente suele ser un signo de uso indebido de una API.
Evitar el enhebrado múltiple excesivo

Esto puede causar problemas en el servidor y un comportamiento poco fiable. A menudo, el subproceso no mejorará el rendimiento, ya que puede causar contención de la tabla de datos.

Nota: Este enhebrado puede estar limitado por la limitación en el futuro para proteger los servidores.

Evitar API obsoletasSFAPI (excepto CompoundEmployee) y SFAPI Adhoc han quedado obsoletos. Utilice OData con paginación de instantánea.
No consulte propiedades y entidades desplegadas que no necesite ni use

Es fácil crear una consulta que haga más $select y más $expand de lo que necesita.

Nota: Integration Center evita esto, en lugar de que un desarrollador cree una consulta manualmente basada en la asignación de campos, IC genera la consulta basada en la asignación.

Ajuste el tiempo de espera del cliente para que coincida con el tiempo de espera del sistema

Su cliente debe estar configurado para esperar un período de tiempo razonable antes de que se agote el tiempo de espera. Las operaciones largas pueden ejecutarse durante 7 minutos y nuestra red y servidores continuarán procesando una transacción durante tanto tiempo.

Es mejor esperar a que se complete la transacción (en lugar de simplemente desperdiciar la transacción sin esperar a que se complete).

Nota: También puede simplificar su transacción para evitar tiempos de espera en primer lugar.

Utilizar herramientas de API como Data Model Navigator para ajustar consultasEl Navegador de modelos de datos puede revelar fácilmente las relaciones disponibles a otras entidades, simplificando potencialmente su caso de uso, mientras que el modo de vista previa del Centro de integración puede confirmar que sus resultados incluyan los datos adecuados en sus respuestas.
Seleccione la entidad base OData óptimaOData ofrece mucha flexibilidad para basar una consulta, pero es importante elegir el mejor para su caso de uso. Por ejemplo, PerPerson es una entidad inicial mejor que PerPersonal. El uso de este último aumenta la longitud de todas las rutas de expansión al correo electrónico, etc. y da como resultado un rendimiento deficiente.

No extraiga muchos registros 1 a la vez con consultas de clave de predicado o singleton $filter en lugar de por lote o utilizando la cláusula $filter IN

Esto sucede a menudo consultando desde una lista de claves, que es una técnica común de "unión en memoria".

filtrar con una cláusula clave que verifica solo una instancia de entidad individual, es decir, &$filter=<clave> eq <valor clave>

2. Predicar consultas clave como /odata/v2/User(userId='cgrant1')

Recomendación: utilice técnicas de unión OData o utilice el operador de filtro IN: $filter=key in ('cgrant1',mhoff1',....)

Ejecutar una consulta API OData simple utilizando el cliente REST avanzado

Resumen del proceso

Esta simulación muestra los pasos de configuración básicos necesarios para configurar manualmente la configuración para SAP SuccessFactors Employee Central. Obtendrá los conocimientos básicos de la llamada y las herramientas de la API de OData. Cómo supervisar las API para diferentes socios.

Prerrequisitos

La siguiente configuración y personalización deben haberse completado antes de implementar la configuración básica en SAP SuccessFactors.

  • Acceso a SFAPI de OData
  • Acceso al log de audio
  • Acceso a herramientas de API

Resultado

Como parte de esta demostración, cubriremos la sección de configuración en EC, que es: Aspectos básicos de la API de EC OData - Cliente REST.