Example-driven Web API Specification DiscoveryJavier Canovas
Slides of my presentation at European Conference on Modelling Foundations and Applications (ECMFA'17). To be presented during the session on Thursday 16:00-17:30
AMS adapters in Rails 5 are important for building a wonderful RESTful API because they provide hypermedia controls and links in the API response. The JSON API adapter in particular generates responses that follow the JSON API specification by including links, relationships, pagination metadata, and embedded resources. Adapters allow Rails to render different representation formats like JSON API, customize the API structure, and improve the developer experience of the API through conventions like hypermedia controls and links. However, there is still work to be done on adapters, like improving deserialization, documentation, and better supporting JSON API conventions fully.
The document discusses GraphQL and Relay concepts including queries, mutations, fragments, and arguments. It also provides examples of GraphQL queries to fetch user and repository data, including nested and filtered data. Relay concepts like prefetch caching, server data updating, and optimistic updates are briefly mentioned as well.
Winning with Structured Data and Schema.org - OMLIVE 2018Izzi Smith
The use of Structured Data and Schema helps provide crucial understanding and context to your data in a way Search Engines can understand, allowing them to provide more relevant and richer results to users. My talk for the OMLIVE 2018 aims to teach you what it is, how to implement it, and how to get the most out of it to improve your organic CTR and performance.
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...apidays
The document discusses specification-driven development and maintaining OpenAPI specifications. It provides examples of using TinySpec to define models and endpoints in separate files. Specifications can then be used to write endpoint tests that validate response data structures and types. They can also be used to validate user-provided data against JSON schemas before updating models in the code. Specifications allow reusing defined formats across tests, input validation, and response serialization.
APIdays Zurich 2019 - Specification Driven Development for REST APIS Alexande...apidays
The document discusses specification-driven development and maintaining OpenAPI specifications. It presents examples of using TinySpec to define models and endpoints in separate files. Specifications can be used to write endpoint tests that validate request/response types and values. User data validation is also covered, with an example of specifying request and response formats for a PATCH endpoint to update a user record.
The document discusses Elasticsearch and provides examples of how to:
- Index and retrieve a document using REST API calls
- Perform various search queries using different conditions like term, range, wildcard searches and combining conditions.
AST - the only true tool for building JavaScriptIngvar Stepanyan
The document discusses working with code abstract syntax trees (ASTs). It provides examples of parsing code into ASTs using libraries like Esprima, querying ASTs using libraries like grasp-equery, constructing and transforming ASTs, and generating code from ASTs. It introduces aster, an AST-based code builder that allows defining reusable AST transformations as plugins and integrating AST-based builds into generic build systems like Grunt and Gulp. Aster aims to improve on file-based builders by working directly with ASTs in a streaming fashion.
This document provides an overview of JavaScript basics including:
- The history and creation of JavaScript in 2 weeks by Brendan Eich.
- Language basics like syntax, variables, objects, functions, and inheritance.
- Tools for JavaScript development like Firebug and jsLint for debugging and linting.
- Best practices like unobtrusive JavaScript, namespaces, and automated testing.
- Resources for further learning JavaScript like books and websites.
The document provides instructions on how to install and use ElasticSearch, an open-source search and analytics engine. It demonstrates how to index and query sample data, perform aggregations, and configure analyzers. Bulk insertion of sample car transaction data is also shown from a GitHub dataset for running queries.
Slajdy z konferencji Confitura 2019.
Wszyscy znamy podejście REST do definiowania API naszych aplikacji. Jednak REST ma swoje wady i ograniczenia. To dla tego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię ograniczenia RESTa i jak je rozwiązuje GraphQL. Pokażę składnię, zalety jak i wady. Będzie też jak zaimplementować GraphQL w Javie oraz co jeszcze warto o nim wiedzieć.
In this presentation, from xAPI Camp at DevLearn 2017, I discuss how easy it can be to use xAPI in your online products. It's so easy, it really only requires four lines of code!
This document contains information about an individual named Subhasri Srinivasan. It lists her skills as Computer Science, C++, Java, JavaScript, PHP, C, and Magento. She is currently a Software Engineer at Lister Technologies in Chennai, India, and has a Bachelor's Degree in Computer Science from SASTRA University. The document also describes a job opening for a QA Lead position in Chennai or Bombai.
Specification-Driven Development of REST APIs by Alexander Zinchuk OdessaJS Conf
A good API specification isn’t just about writing API documentation well. I want to share examples of how one can:
- Make unit tests simpler and more reliable;
- Set up user input preprocessing and validation;
- Automate serialization and ensure response consistency, and event
- Enjoy the benefits of static typing;
This approach is a compilation of different discrete ideas, all based on the smart use of an API specification.
Real-time search in Drupal with Elasticsearch @MoldcampAlexei Gorobets
This document provides an introduction to Elasticsearch, an open source, distributed real-time search and analytics engine. It discusses how to setup Elasticsearch in 2 steps by extracting the archive and running a command. It then demonstrates how to index and search data using Elasticsearch's RESTful API and JSON over HTTP. Examples are provided for indexing, getting, updating, deleting, and searching data as well as distributed, concurrency, and pagination features.
Apache AVRO is a data serialization system that includes a schema language, compact serialized format, RPC framework, and APIs in multiple languages. Its goals are to support cross-language data exchange and simple but expressive schema evolution. It provides a way to define data schemas and protocols and serialize data in a compact binary format. The serialization allows for dynamic schema evolution while preserving compatibility. AVRO integrates with Hadoop and provides tools for working with AVRO data and schemas. Version 1.3 is planned for release soon with evolving but stable APIs and formats.
1. Why we moving API from REST to Graphql?
2. What is Graphql?
3. Graphql in Golang (Why we choose Golang)
4. How to testing Graphql in Golang
5. Deploy Graphql application
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...Codemotion
We live in a interconnected world, were every day new devices, systems, and applications are connected to share information or interact between them. Thus, the importance of designing systems prepared to offer their services and data to a wide range of customers, that could discover, navigate and use their API in a standard and easy way to be consumed. But designing a headless platform to be used easily through their services is not straightforward. In this talk we will go over the challenges that we've found in adding headless nature to our platform and the foundations and tools that we have
Cdm mil-18 - hypermedia ap is for headless platforms and data integrationDavid Gómez García
Slides from my talk at Codemotion Milan 2018. Speaking about how Headess and Hypermedia REST APIs can leverage the way . we integrate different platforms and share date between them
This document provides an overview of Amazon Web Services (AWS) CloudFormation. It discusses CloudFormation as a method to create and manage collections of AWS resources using JSON template files, often described as "infrastructure as code." The document outlines the structure and syntax of CloudFormation templates, including template versions, parameters, mappings, resources, outputs, and intrinsic functions. It also discusses CloudFormation helper scripts like cfn-init and cfn-signal that are used to deploy resources defined in templates.
How to ship customer value faster with step functionsYan Cui
Learn all about AWS Step Functions and how to use them to model business workflows and ship customer values quickly. In this session, we will talk about what is Step Functions, how to model business workflows as state machines, real-world case studies, and design patterns. By the end of this webinar, you should have a good idea of where Step Functions fit into your application and why you should use them (and why not!) to model workflows instead of building a custom solution yourself.
The document discusses NoSQL and MongoDB. It explains that NoSQL databases are non-relational and do not use SQL. MongoDB is introduced as a popular document-oriented NoSQL database that uses documents with schemaless collections. Documents can store data in an embedded or referenced way.
REST is more than just JSON or XML over HTTP. In this presentation we take a closer look how to use links (hypermedia) when designing your RESTful API. Not only does this make your service discoverable and self-descriptive, but it also makes life easier for client developers as the business logic is simply checking the presence or absence of links (HATEOAS).
The presentation is based on a sample application including real business logic and not just basic collection CRUD! We also explore what mediatypes exists for hypermedia and when to use them.
The document discusses JSON (JavaScript Object Notation), an open standard format used to transmit data between a server and applications. It describes how to convert JSON data to Swift types by decoding JSON into custom model objects using a JSONDecoder. It provides examples of decoding JSON into a dictionary of strings and decoding into a custom Report struct by implementing Codable and specifying coding keys. The document also discusses updating a URLSession data task completion handler to decode JSON data into a custom model object.
Building DSLs with Xtext - Eclipse Modeling Day 2009Heiko Behrens
Slides of Eclipse Modeling Day in New York and Toronto http://wiki.eclipse.org/Eclipse_Modeling_Day
Motivation of specific tools with apple corer analogy, Example of domain-specific language (chess notation), introduction to Xtext with demo plus outlook
Slack like a pro: strategies for 10x engineering teamsNacho Cougil
You know Slack, right? It's that tool that some of us have known for the amount of "noise" it generates per second (and that many of us mute as soon as we install it 😅).
But, do you really know it? Do you know how to use it to get the most out of it? Are you sure 🤔? Are you tired of the amount of messages you have to reply to? Are you worried about the hundred conversations you have open? Or are you unaware of changes in projects relevant to your team? Would you like to automate tasks but don't know how to do so?
In this session, I'll try to share how using Slack can help you to be more productive, not only for you but for your colleagues and how that can help you to be much more efficient... and live more relaxed 😉.
If you thought that our work was based (only) on writing code, ... I'm sorry to tell you, but the truth is that it's not 😅. What's more, in the fast-paced world we live in, where so many things change at an accelerated speed, communication is key, and if you use Slack, you should learn to make the most of it.
---
Presentation shared at JCON Europe '25
Feedback form:
http://tiny.cc/slack-like-a-pro-feedback
The Future of Cisco Cloud Security: Innovations and AI IntegrationRe-solution Data Ltd
Stay ahead with Re-Solution Data Ltd and Cisco cloud security, featuring the latest innovations and AI integration. Our solutions leverage cutting-edge technology to deliver proactive defense and simplified operations. Experience the future of security with our expert guidance and support.
AST - the only true tool for building JavaScriptIngvar Stepanyan
The document discusses working with code abstract syntax trees (ASTs). It provides examples of parsing code into ASTs using libraries like Esprima, querying ASTs using libraries like grasp-equery, constructing and transforming ASTs, and generating code from ASTs. It introduces aster, an AST-based code builder that allows defining reusable AST transformations as plugins and integrating AST-based builds into generic build systems like Grunt and Gulp. Aster aims to improve on file-based builders by working directly with ASTs in a streaming fashion.
This document provides an overview of JavaScript basics including:
- The history and creation of JavaScript in 2 weeks by Brendan Eich.
- Language basics like syntax, variables, objects, functions, and inheritance.
- Tools for JavaScript development like Firebug and jsLint for debugging and linting.
- Best practices like unobtrusive JavaScript, namespaces, and automated testing.
- Resources for further learning JavaScript like books and websites.
The document provides instructions on how to install and use ElasticSearch, an open-source search and analytics engine. It demonstrates how to index and query sample data, perform aggregations, and configure analyzers. Bulk insertion of sample car transaction data is also shown from a GitHub dataset for running queries.
Slajdy z konferencji Confitura 2019.
Wszyscy znamy podejście REST do definiowania API naszych aplikacji. Jednak REST ma swoje wady i ograniczenia. To dla tego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię ograniczenia RESTa i jak je rozwiązuje GraphQL. Pokażę składnię, zalety jak i wady. Będzie też jak zaimplementować GraphQL w Javie oraz co jeszcze warto o nim wiedzieć.
In this presentation, from xAPI Camp at DevLearn 2017, I discuss how easy it can be to use xAPI in your online products. It's so easy, it really only requires four lines of code!
This document contains information about an individual named Subhasri Srinivasan. It lists her skills as Computer Science, C++, Java, JavaScript, PHP, C, and Magento. She is currently a Software Engineer at Lister Technologies in Chennai, India, and has a Bachelor's Degree in Computer Science from SASTRA University. The document also describes a job opening for a QA Lead position in Chennai or Bombai.
Specification-Driven Development of REST APIs by Alexander Zinchuk OdessaJS Conf
A good API specification isn’t just about writing API documentation well. I want to share examples of how one can:
- Make unit tests simpler and more reliable;
- Set up user input preprocessing and validation;
- Automate serialization and ensure response consistency, and event
- Enjoy the benefits of static typing;
This approach is a compilation of different discrete ideas, all based on the smart use of an API specification.
Real-time search in Drupal with Elasticsearch @MoldcampAlexei Gorobets
This document provides an introduction to Elasticsearch, an open source, distributed real-time search and analytics engine. It discusses how to setup Elasticsearch in 2 steps by extracting the archive and running a command. It then demonstrates how to index and search data using Elasticsearch's RESTful API and JSON over HTTP. Examples are provided for indexing, getting, updating, deleting, and searching data as well as distributed, concurrency, and pagination features.
Apache AVRO is a data serialization system that includes a schema language, compact serialized format, RPC framework, and APIs in multiple languages. Its goals are to support cross-language data exchange and simple but expressive schema evolution. It provides a way to define data schemas and protocols and serialize data in a compact binary format. The serialization allows for dynamic schema evolution while preserving compatibility. AVRO integrates with Hadoop and provides tools for working with AVRO data and schemas. Version 1.3 is planned for release soon with evolving but stable APIs and formats.
1. Why we moving API from REST to Graphql?
2. What is Graphql?
3. Graphql in Golang (Why we choose Golang)
4. How to testing Graphql in Golang
5. Deploy Graphql application
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...Codemotion
We live in a interconnected world, were every day new devices, systems, and applications are connected to share information or interact between them. Thus, the importance of designing systems prepared to offer their services and data to a wide range of customers, that could discover, navigate and use their API in a standard and easy way to be consumed. But designing a headless platform to be used easily through their services is not straightforward. In this talk we will go over the challenges that we've found in adding headless nature to our platform and the foundations and tools that we have
Cdm mil-18 - hypermedia ap is for headless platforms and data integrationDavid Gómez García
Slides from my talk at Codemotion Milan 2018. Speaking about how Headess and Hypermedia REST APIs can leverage the way . we integrate different platforms and share date between them
This document provides an overview of Amazon Web Services (AWS) CloudFormation. It discusses CloudFormation as a method to create and manage collections of AWS resources using JSON template files, often described as "infrastructure as code." The document outlines the structure and syntax of CloudFormation templates, including template versions, parameters, mappings, resources, outputs, and intrinsic functions. It also discusses CloudFormation helper scripts like cfn-init and cfn-signal that are used to deploy resources defined in templates.
How to ship customer value faster with step functionsYan Cui
Learn all about AWS Step Functions and how to use them to model business workflows and ship customer values quickly. In this session, we will talk about what is Step Functions, how to model business workflows as state machines, real-world case studies, and design patterns. By the end of this webinar, you should have a good idea of where Step Functions fit into your application and why you should use them (and why not!) to model workflows instead of building a custom solution yourself.
The document discusses NoSQL and MongoDB. It explains that NoSQL databases are non-relational and do not use SQL. MongoDB is introduced as a popular document-oriented NoSQL database that uses documents with schemaless collections. Documents can store data in an embedded or referenced way.
REST is more than just JSON or XML over HTTP. In this presentation we take a closer look how to use links (hypermedia) when designing your RESTful API. Not only does this make your service discoverable and self-descriptive, but it also makes life easier for client developers as the business logic is simply checking the presence or absence of links (HATEOAS).
The presentation is based on a sample application including real business logic and not just basic collection CRUD! We also explore what mediatypes exists for hypermedia and when to use them.
The document discusses JSON (JavaScript Object Notation), an open standard format used to transmit data between a server and applications. It describes how to convert JSON data to Swift types by decoding JSON into custom model objects using a JSONDecoder. It provides examples of decoding JSON into a dictionary of strings and decoding into a custom Report struct by implementing Codable and specifying coding keys. The document also discusses updating a URLSession data task completion handler to decode JSON data into a custom model object.
Building DSLs with Xtext - Eclipse Modeling Day 2009Heiko Behrens
Slides of Eclipse Modeling Day in New York and Toronto http://wiki.eclipse.org/Eclipse_Modeling_Day
Motivation of specific tools with apple corer analogy, Example of domain-specific language (chess notation), introduction to Xtext with demo plus outlook
Slack like a pro: strategies for 10x engineering teamsNacho Cougil
You know Slack, right? It's that tool that some of us have known for the amount of "noise" it generates per second (and that many of us mute as soon as we install it 😅).
But, do you really know it? Do you know how to use it to get the most out of it? Are you sure 🤔? Are you tired of the amount of messages you have to reply to? Are you worried about the hundred conversations you have open? Or are you unaware of changes in projects relevant to your team? Would you like to automate tasks but don't know how to do so?
In this session, I'll try to share how using Slack can help you to be more productive, not only for you but for your colleagues and how that can help you to be much more efficient... and live more relaxed 😉.
If you thought that our work was based (only) on writing code, ... I'm sorry to tell you, but the truth is that it's not 😅. What's more, in the fast-paced world we live in, where so many things change at an accelerated speed, communication is key, and if you use Slack, you should learn to make the most of it.
---
Presentation shared at JCON Europe '25
Feedback form:
http://tiny.cc/slack-like-a-pro-feedback
The Future of Cisco Cloud Security: Innovations and AI IntegrationRe-solution Data Ltd
Stay ahead with Re-Solution Data Ltd and Cisco cloud security, featuring the latest innovations and AI integration. Our solutions leverage cutting-edge technology to deliver proactive defense and simplified operations. Experience the future of security with our expert guidance and support.
Smart Investments Leveraging Agentic AI for Real Estate Success.pptxSeasia Infotech
Unlock real estate success with smart investments leveraging agentic AI. This presentation explores how Agentic AI drives smarter decisions, automates tasks, increases lead conversion, and enhances client retention empowering success in a fast-evolving market.
The FS Technology Summit
Technology increasingly permeates every facet of the financial services sector, from personal banking to institutional investment to payments.
The conference will explore the transformative impact of technology on the modern FS enterprise, examining how it can be applied to drive practical business improvement and frontline customer impact.
The programme will contextualise the most prominent trends that are shaping the industry, from technical advancements in Cloud, AI, Blockchain and Payments, to the regulatory impact of Consumer Duty, SDR, DORA & NIS2.
The Summit will bring together senior leaders from across the sector, and is geared for shared learning, collaboration and high-level networking. The FS Technology Summit will be held as a sister event to our 12th annual Fintech Summit.
Autonomous Resource Optimization: How AI is Solving the Overprovisioning Problem
In this session, Suresh Mathew will explore how autonomous AI is revolutionizing cloud resource management for DevOps, SRE, and Platform Engineering teams.
Traditional cloud infrastructure typically suffers from significant overprovisioning—a "better safe than sorry" approach that leads to wasted resources and inflated costs. This presentation will demonstrate how AI-powered autonomous systems are eliminating this problem through continuous, real-time optimization.
Key topics include:
Why manual and rule-based optimization approaches fall short in dynamic cloud environments
How machine learning predicts workload patterns to right-size resources before they're needed
Real-world implementation strategies that don't compromise reliability or performance
Featured case study: Learn how Palo Alto Networks implemented autonomous resource optimization to save $3.5M in cloud costs while maintaining strict performance SLAs across their global security infrastructure.
Bio:
Suresh Mathew is the CEO and Founder of Sedai, an autonomous cloud management platform. Previously, as Sr. MTS Architect at PayPal, he built an AI/ML platform that autonomously resolved performance and availability issues—executing over 2 million remediations annually and becoming the only system trusted to operate independently during peak holiday traffic.
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...Ivano Malavolta
Slides of the presentation by Vincenzo Stoico at the main track of the 4th International Conference on AI Engineering (CAIN 2025).
The paper is available here: http://www.ivanomalavolta.com/files/papers/CAIN_2025.pdf
Enterprise Integration Is Dead! Long Live AI-Driven Integration with Apache C...Markus Eisele
We keep hearing that “integration” is old news, with modern architectures and platforms promising frictionless connectivity. So, is enterprise integration really dead? Not exactly! In this session, we’ll talk about how AI-infused applications and tool-calling agents are redefining the concept of integration, especially when combined with the power of Apache Camel.
We will discuss the the role of enterprise integration in an era where Large Language Models (LLMs) and agent-driven automation can interpret business needs, handle routing, and invoke Camel endpoints with minimal developer intervention. You will see how these AI-enabled systems help weave business data, applications, and services together giving us flexibility and freeing us from hardcoding boilerplate of integration flows.
You’ll walk away with:
An updated perspective on the future of “integration” in a world driven by AI, LLMs, and intelligent agents.
Real-world examples of how tool-calling functionality can transform Camel routes into dynamic, adaptive workflows.
Code examples how to merge AI capabilities with Apache Camel to deliver flexible, event-driven architectures at scale.
Roadmap strategies for integrating LLM-powered agents into your enterprise, orchestrating services that previously demanded complex, rigid solutions.
Join us to see why rumours of integration’s relevancy have been greatly exaggerated—and see first hand how Camel, powered by AI, is quietly reinventing how we connect the enterprise.
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Raffi Khatchadourian
Efficiency is essential to support responsiveness w.r.t. ever-growing datasets, especially for Deep Learning (DL) systems. DL frameworks have traditionally embraced deferred execution-style DL code that supports symbolic, graph-based Deep Neural Network (DNN) computation. While scalable, such development tends to produce DL code that is error-prone, non-intuitive, and difficult to debug. Consequently, more natural, less error-prone imperative DL frameworks encouraging eager execution have emerged at the expense of run-time performance. While hybrid approaches aim for the "best of both worlds," the challenges in applying them in the real world are largely unknown. We conduct a data-driven analysis of challenges---and resultant bugs---involved in writing reliable yet performant imperative DL code by studying 250 open-source projects, consisting of 19.7 MLOC, along with 470 and 446 manually examined code patches and bug reports, respectively. The results indicate that hybridization: (i) is prone to API misuse, (ii) can result in performance degradation---the opposite of its intention, and (iii) has limited application due to execution mode incompatibility. We put forth several recommendations, best practices, and anti-patterns for effectively hybridizing imperative DL code, potentially benefiting DL practitioners, API designers, tool developers, and educators.
Canadian book publishing: Insights from the latest salary survey - Tech Forum...BookNet Canada
Join us for a presentation in partnership with the Association of Canadian Publishers (ACP) as they share results from the recently conducted Canadian Book Publishing Industry Salary Survey. This comprehensive survey provides key insights into average salaries across departments, roles, and demographic metrics. Members of ACP’s Diversity and Inclusion Committee will join us to unpack what the findings mean in the context of justice, equity, diversity, and inclusion in the industry.
Results of the 2024 Canadian Book Publishing Industry Salary Survey: https://publishers.ca/wp-content/uploads/2025/04/ACP_Salary_Survey_FINAL-2.pdf
Link to presentation recording and transcript: https://bnctechforum.ca/sessions/canadian-book-publishing-insights-from-the-latest-salary-survey/
Presented by BookNet Canada and the Association of Canadian Publishers on May 1, 2025 with support from the Department of Canadian Heritage.
Config 2025 presentation recap covering both daysTrishAntoni1
Config 2025 What Made Config 2025 Special
Overflowing energy and creativity
Clear themes: accessibility, emotion, AI collaboration
A mix of tech innovation and raw human storytelling
(Background: a photo of the conference crowd or stage)
AI x Accessibility UXPA by Stew Smith and Olivier VroomUXPA Boston
This presentation explores how AI will transform traditional assistive technologies and create entirely new ways to increase inclusion. The presenters will focus specifically on AI's potential to better serve the deaf community - an area where both presenters have made connections and are conducting research. The presenters are conducting a survey of the deaf community to better understand their needs and will present the findings and implications during the presentation.
AI integration into accessibility solutions marks one of the most significant technological advancements of our time. For UX designers and researchers, a basic understanding of how AI systems operate, from simple rule-based algorithms to sophisticated neural networks, offers crucial knowledge for creating more intuitive and adaptable interfaces to improve the lives of 1.3 billion people worldwide living with disabilities.
Attendees will gain valuable insights into designing AI-powered accessibility solutions prioritizing real user needs. The presenters will present practical human-centered design frameworks that balance AI’s capabilities with real-world user experiences. By exploring current applications, emerging innovations, and firsthand perspectives from the deaf community, this presentation will equip UX professionals with actionable strategies to create more inclusive digital experiences that address a wide range of accessibility challenges.
Webinar - Top 5 Backup Mistakes MSPs and Businesses Make .pptxMSP360
Data loss can be devastating — especially when you discover it while trying to recover. All too often, it happens due to mistakes in your backup strategy. Whether you work for an MSP or within an organization, your company is susceptible to common backup mistakes that leave data vulnerable, productivity in question, and compliance at risk.
Join 4-time Microsoft MVP Nick Cavalancia as he breaks down the top five backup mistakes businesses and MSPs make—and, more importantly, explains how to prevent them.
In the dynamic world of finance, certain individuals emerge who don’t just participate but fundamentally reshape the landscape. Jignesh Shah is widely regarded as one such figure. Lauded as the ‘Innovator of Modern Financial Markets’, he stands out as a first-generation entrepreneur whose vision led to the creation of numerous next-generation and multi-asset class exchange platforms.
UiPath Agentic Automation: Community Developer OpportunitiesDianaGray10
Please join our UiPath Agentic: Community Developer session where we will review some of the opportunities that will be available this year for developers wanting to learn more about Agentic Automation.
#2: Hello everyone I'm Jeremy, lead of the WebApps Engineering team, here at Criteo, also leading the effort around our Marketing API, or MAPI if you're more intimate with it.
I wanted to talk with you about Pragmatic API Design, but that was actually an excuse to secure few minutes here and now to talk about Dungeons & Dragons !
#3: Who here know and have already played Dungeons & Dragons, or any kind of role playing game, like Vampire, Chtulu, Warhammer, ...
For all the others, WHAT ARE YOU WAITING FOR? Come on, as you've seen there people here that could introduce you to the game. And if you're too shy, come see me after, I'd be glad to do it for you.
As there is a lot of people here, let's create an API so we can all play together, and don't wait for everyone to take their turn.
#4: So what do I mean by pragmatic API? Don't be scared, it's **NOT** another standard, like Restfull, Hateos, GraphQL, ... because standard are generic by definition, created to cover as much uses-cases as possible, and could often make you build complex design to achieve simple things.
#5: With Pragmatic here, I mean designing an API using our developers common sense, to create the best API possible for our specific purpose, which is in this case playing D&D. This mean we'll allow us to not follow standard, **when it make sense of course** -being pragmatic we don't want to reinvent the wheel.
#6: Finally our key principles:
- **Affordance**: This is actually not a true english word, but I like it **"Affordance"**. It the ability of something to suggest its usage, being auto-descriptive and self-explanatory.
- **KISS**: Keep It Simple Stupid. Anyone should be able to use you API wihtout having to refer to extended documentation, **swagger must be enougth**. We're are developpers, we all do that: not looking at the documentation, and complaining if we can't understand what's happening. This is why I keep building Ikea furniture upside-down (true story, people here can relate).
- **Client centric**: Like Criteo, be client centric. Do not build the API for your data nor services. Do it for your consumers, by putting yourselves in their shoes.
- **Avoid Ambiguity**: Never allow your consumers, your clients, to do one thing with more than one way. Use standard, concrete and shared terms. Not specific business terms nor acronyms.
This is what we'll do now by playing D&D and stop talking about boring API design.
#7: The first thing you need to play D&D is to create your own character.
Of course you can choose your name, using up to 50 letters. If you don't know why so many, you've never meet an Elvish player, and there fancy names...
There is some randomness, using Dice that you should roll to determine your abilities: Strength, Dexterity, Consitution, Intelligence, Wisdom and Charisma.
For those who wonder what's the difference between Intelligence and Wisdom: "Intelligence is knowing the Tomatoes is a fruit, Wisdom is knowing you don't put Tomatoes in a fruit salad". (Checked, I always dreamed to say that in front of many people: life achievement here).
Anyway, I do not trust my players to roll any dice, especially during character creation. So the dice rolls should be behind our API. And for simplicity, we'll not allow to distribute results amongst abilities, we'll go for full randomness.
You need to choose a race (from the Dwarf, Elf, Halfling, Human, ...) and a class (Barbarian, Paladin, Rogue, Ranger, Warlock or Wizard).
#8: And here is how it works using our API. A basic POST request to our *characters* endpoints. And it will return the fully created character.
So, ok our Mountain Dwarf Paladin isn't that Ferocious actually, let's rename him.
But we don't want to be able to update everything, as I say I don't trust my players, change there experience, etc...
#9: So the only thing we should allow is to PATCH our name for now.
And of course we should return the exact same result as a creation, a fully operational character.
Ok we've done the easy thing now, let's do more advanced and fun thing with our Paladin.
#10: Usually when you play D&D, you'll very quickly found yourself fighting some ugly monsters like Kobolds, Goblins or Skeletons, or if there's a Rogue in your party, smashing the Rogue for trying to steal your money.
To attack it's simple you Roll a D20, add you Strength ability modifier (or dexterity) depending on the weapon you're using, add you're Proficiency (if your character knows how to use its weapon).
If the result is more or equal than the **ArmorClass** of your target, it's a sucess. In any case, if the dice give you a 1, it's a fumble an automatic failure and depending on you Game Master, it could end very badly, like actually hitting by mistake you're friendly wizard, who doesn't have a lot of hitpoints... But if the dice gave you a natural 20, then it's a critical an automatic success, allowing you to double your damage. But don't worry, the Game Master always find a way to take his revenge.
If you successfuly attacked, then you can hit the target, roll your weapon's damage, add your Strength (or Dexterity) and finally lower the target hitpoints.
But how do we do all of that ?
#11: Client computation: no this is no more a simple tu use API, this will require extended works. We do not want to be Ikea.
#12: Consequences: do we implement triggers? Reminds me too much of old SQL project. And anyway it isn't self explanatory anymore. We want to be explicit about what happens here.
#13: Do we create new resources then, like we should with the REST approach ? Do we really want to persist them, to generate identifiers, is there any update to handle? When is it actually processed ?
Ok too many question, we're failing to design something simple, something **PRAGMATIC**.
Let's take a deep breath, and get back to D&D. What are we trying to do? We're trying to take an **ACTION**!
#14: You will POST an action, which is not a resource, but an entity on its own.
This action, will give you an outcome (or nothing if there is no result except success/failure).
This nice thing is even if it's not a resource, we cans still nest action if we want.
And finally it's very easy to bacth actions, when they are explicitly designed.
Let's try it
#15: This one is very easy; it doesn't need a body to be executed. We could of course create one with the weapon we want to use, ... but let's say we'll use the weapon currently equiped, so we can go grab some foods sooner.
Our action have an outcome, a bit disapointed here, as we've rolled a fumble... even if we have 6 in total thanks to our strength and proficiency (remember, D20 + strength modifier + proficiency).
#16: So fine, let's actually hit our friendly wizard, wich is an elf as you can see by his name.
We can retreive hime easyli as usual using a GET resource if you know its Id.
We can see he only have 8 hitpoints unfortunately for him.
But anyway let's hit him.
#17: Let's say our ferocious paladin have a Longsword equiped in his main hand. Longsword does 1d8 + his strength modifier, of slashing damage.
This is a basic action, using an HTTP POST against the wizard, fortunalty for him, it seems the wizard had already cast the spell **Blade Ward**, giving him resistance to the attack, so we only hit hime for 3 damage.
#18: But our Paladin is Ferocious, so let's say he actually have the magic weapon: Flame Tongue!
This weapon is awesome, not only it looks badass to have a flaming weapon, but it also add 2d6 fire damage, which could overcome the wizard resistance.
#19: In terms of API it should be 2 different hit action then, that we should execute as a **BATCH**.
#20: So let's actually batch the action, but explicitly, by addin the explicit keyword "_batch". The underscore is important here, to make the difference between resources, actions and keywords.
It's nomenclature, starting with the underscore make it clear as sonn as you see it, that it's not an action nor a new resource, nor an the id of a resources.
And in terms of usage, it's simple too, just, add all you batch actions in an array, and receive an array of outcomes. For each action, it's index ni the array is the key to find the corresponding outcome.
Ok our Wizard is not dead, and is all out for revenge...
#21: This is the usual wizard signature spell, and it's no joke: "A bright streak flashes from your pointing finger to an area you choose and then blossoms with a low roar into an explosion of flame."
There may be a bit of excalation betweend our Paladin and Wizard here...
"Each hit creature must make a Dexterity saving throw. Taking 8d6 fire damage on a failed save, or half as much damage on a successful one."
#22: So we have a new kind of action here, the **Saving Throw**. It’s a test against one of your abilities. Very often you'll have to do this kind of action, to resist spell damage, or avoid being poisons, deceased...
#23: So we have a new action, with its own outcome, once again pretty simple and explicit.
#24: And so we can directly use it as part of the Hit action, as an optionnal **Nested** action, giving you the nested outcome.
Here we succeeded the save, and only suffer half of the rolled damage that was by then 24.
Fine, but actually... a fireball hits **EVERYONE** in the area, including our deer rogue, who was obviously trying to steal money from our Paladin.
#25: To do that we’ll continue to use our batch keyword, but this time, in place of the id of the targeted characters. Then we can have a CharactersBatchAction, that encapsulate the action itself, and defined the ids of the character on which we want to execute the action.
That way can damage ou Paladin very badly even if he succeeded his saving throw. And as exepcted in this kind of scenario, our Rogue fumble his save, and died.
#26: The batch weyword, can also allow us to execute in one batch different actions at the same time, here with the Hit action from the fireball, and a Constitution saving throw, because the explosion also broke some flask of poison the rogue have in its bag.
#28: Here, only the Paladin is doing the Constitution saving throw, because the Rogue is immune to its own poison.
Also the rogue have a special feat, allowing him to reduce incomming damage from things like a fireball, so he only suffer 4d6 fire damage. (He’s dead anyway)
Time to look out for a new character, let’s search from all the characters…
#29: But how do we do search ?
Do we post an action to the collection?
Do we create a new SEARCH resource ?
What’s would be it’s boyd anyway?
But we know we want to return the list characters, exactly like we do on the characters endpoint.
Do we really want to build a search? Or do we actually want to add filters to the characters list ?!
#30: Well the query string looks perfect for that ! We can even count using this way.
It require a little bit of work ou the API side, but that’s not actually that complex, to do.
In fact, some of you may have been sneaky enough to find out already, but the API is exists and is available at the URL dnd.jbuisson.fr.
The code is also fully available on gitlab, at gitlab.com/jbuisson/dnd
https://dnd.jbuisson.fr/api/characters?intelligence%3C18&intelligence%3E10&Name~=Mysterious