This document provides an overview of NGSIv2 for developers who are already familiar with NGSIv1. It introduces NGSIv2 as a revamped, simplified version of NGSIv1 that is designed to be more RESTful and developer-friendly. The key differences highlighted include simplified URLs and payloads, support for native JSON data types, improved geolocation and filtering capabilities, and additional features like transient entities and batch operations. Developers are encouraged to use NGSIv2 going forward, even though NGSIv1 remains available for compatibility.
NGSIv2 Overview for Developers That Already Know NGSIv1Fermin Galan
This document describes the novelties in NGSIv2 for people already familiar with NGSIv1. Thus, you would learn how to do the things you are familiar with NGSIv1 now in NGSIv2 as long as new and powerfull capabilities of the new version of the API. Some knowledge in NGSIv1 API is required.
NGSIv2 Overview for Developers That Already Know NGSIv1Fermin Galan
This document describes the novelties in NGSIv2 for people already familiar with NGSIv1. Thus, you would learn how to do the things you are familiar with NGSIv1 now in NGSIv2 as long as new and powerfull capabilities of the new version of the API. Some knowledge in NGSIv1 API is required.
Context-aware application development with FIWARE #CPBR8Fermin Galan
Context-aware application development with FIWARE, used in the #CPBR8 workshop. It includes basic and advanced Orion topics, along with usage examples.
Join this talk and test session with a MongoDB Developer Advocate where you'll go over the setup, configuration, and deployment of an Atlas environment. Create a service that you can take back in a production-ready state and prepare to unleash your inner genius.
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB
MongoDB Atlas Data Lake is a new service offered by MongoDB Atlas. Many organizations store long term, archival data in cost-effective storage like S3, GCP, and Azure Blobs. However, many of them do not have robust systems or tools to effectively utilize large amounts of data to inform decision making. MongoDB Atlas Data Lake is a service allowing organizations to analyze their long-term data to discover a wealth of information about their business.
This session will take a deep dive into the features that are currently available in MongoDB Atlas Data Lake and how they are implemented. In addition, we'll discuss future plans and opportunities and offer ample Q&A time with the engineers on the project.
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB
Join this talk and test session with a MongoDB Developer Advocate where you'll go over the setup, configuration, and deployment of an Atlas environment. Create a service that you can take back in a production-ready state and prepare to unleash your inner genius.
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep DiveMongoDB
Come and hear more about our new full-text search operator for MongoDB Atlas. This is a significant enhancement to MongoDB search features and is the easiest and most powerful full-text search solution for databases on MongoDB Atlas.
This talk is important for anyone who has implemented search or is considering a search feature in their MongoDB application.
You will see a demo of $searchBeta, learn about how it works, discover specific features to help you deliver relevant search results, and learn how you can start using full-text search in your application today.
FIWARE: Managing Context Information at large scaleFermin Galan
This presentation describes how context management is implemented in FIWARE platform, base don Orion Context Broker GEri. Both basic usage of Context Broker and advanced topics are included.
Introduction to Information Model. Which types of representation of Information Model are used in FIWARE. What are the differences between NGSIv2 and NGSI-LD. Where can I get details about Data Models in use?
MongoDB .local Toronto 2019: Keep your Business Safe and Scaling Holistically...MongoDB
Learn how MongoDB on LinuxONE and IBM Cloud Hyper Protect Services can be used to manage highly sensitive and confidential data – pervasively encrypting and securing your environments, consolidating thousands of database instances while serving hundreds of billions of queries a day. At the end of this session you will better understand how managing and scaling large amounts of critical business data can be achieved easily with automatic pervasive encryption of code and data in-flight and at-rest.
If you're a Developer, Architect, DBA or a Business Stakeholder, and your organization is using or planning to use MongoDB on-premise or in the cloud, this session will help you to gain insights into the best way to run MongoDB to keep your business safe and scaling holistically.
Michael Koster from ARM presented during the Open Mobile Alliance LwM2M Workshop event on January 28, 2015. This is a copy of the slides presented for his session titled, "IPSO Alliance Objects".
Context-aware application development with FIWARE #CPBR8Fermin Galan
Context-aware application development with FIWARE, used in the #CPBR8 workshop. It includes basic and advanced Orion topics, along with usage examples.
Join this talk and test session with a MongoDB Developer Advocate where you'll go over the setup, configuration, and deployment of an Atlas environment. Create a service that you can take back in a production-ready state and prepare to unleash your inner genius.
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB
MongoDB Atlas Data Lake is a new service offered by MongoDB Atlas. Many organizations store long term, archival data in cost-effective storage like S3, GCP, and Azure Blobs. However, many of them do not have robust systems or tools to effectively utilize large amounts of data to inform decision making. MongoDB Atlas Data Lake is a service allowing organizations to analyze their long-term data to discover a wealth of information about their business.
This session will take a deep dive into the features that are currently available in MongoDB Atlas Data Lake and how they are implemented. In addition, we'll discuss future plans and opportunities and offer ample Q&A time with the engineers on the project.
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB
Join this talk and test session with a MongoDB Developer Advocate where you'll go over the setup, configuration, and deployment of an Atlas environment. Create a service that you can take back in a production-ready state and prepare to unleash your inner genius.
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep DiveMongoDB
Come and hear more about our new full-text search operator for MongoDB Atlas. This is a significant enhancement to MongoDB search features and is the easiest and most powerful full-text search solution for databases on MongoDB Atlas.
This talk is important for anyone who has implemented search or is considering a search feature in their MongoDB application.
You will see a demo of $searchBeta, learn about how it works, discover specific features to help you deliver relevant search results, and learn how you can start using full-text search in your application today.
FIWARE: Managing Context Information at large scaleFermin Galan
This presentation describes how context management is implemented in FIWARE platform, base don Orion Context Broker GEri. Both basic usage of Context Broker and advanced topics are included.
Introduction to Information Model. Which types of representation of Information Model are used in FIWARE. What are the differences between NGSIv2 and NGSI-LD. Where can I get details about Data Models in use?
MongoDB .local Toronto 2019: Keep your Business Safe and Scaling Holistically...MongoDB
Learn how MongoDB on LinuxONE and IBM Cloud Hyper Protect Services can be used to manage highly sensitive and confidential data – pervasively encrypting and securing your environments, consolidating thousands of database instances while serving hundreds of billions of queries a day. At the end of this session you will better understand how managing and scaling large amounts of critical business data can be achieved easily with automatic pervasive encryption of code and data in-flight and at-rest.
If you're a Developer, Architect, DBA or a Business Stakeholder, and your organization is using or planning to use MongoDB on-premise or in the cloud, this session will help you to gain insights into the best way to run MongoDB to keep your business safe and scaling holistically.
Michael Koster from ARM presented during the Open Mobile Alliance LwM2M Workshop event on January 28, 2015. This is a copy of the slides presented for his session titled, "IPSO Alliance Objects".
Actuation, Federation and Interoperability of Context BrokersFIWARE
This training camp teaches you how FIWARE technologies and iSHARE, brought together under the umbrella of the i4Trust initiative, can be combined to provide the means for creation of data spaces in which multiple organizations can exchange digital twin data in a trusted and efficient manner, collaborating in the development of innovative services based on data sharing and creating value out of the data they share. SMEs and Digital Innovation Hubs (DIHs) will be equipped with the necessary know-how to use the i4Trust framework for creating data spaces!
General overview of Orion Context Broker architecture. Introduction to NGSI, NGSIv2. Overview of the main functionalities of FIWARE Orion Context Broker. Creating and pulling data. Pushing data and notifications and the introduction to the batch operations.
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
Presentation for the 1st InterSystems Meetup in the Minsk:
- New and better InterSystems changes their practice.
- open-source repositories, meetups, and hackathon;
- CPM (package manager) as a good example of open-source project
Similar to NGSIv2 Overview for Developers That Already Know NGSIv1 20180716 (20)
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Mind IT Systems
Healthcare providers often struggle with the complexities of chronic conditions and remote patient monitoring, as each patient requires personalized care and ongoing monitoring. Off-the-shelf solutions may not meet these diverse needs, leading to inefficiencies and gaps in care. It’s here, custom healthcare software offers a tailored solution, ensuring improved care and effectiveness.
Check out the webinar slides to learn more about how XfilesPro transforms Salesforce document management by leveraging its world-class applications. For more details, please connect with sales@xfilespro.com
If you want to watch the on-demand webinar, please click here: https://www.xfilespro.com/webinars/salesforce-document-management-2-0-smarter-faster-better/
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
Cyaniclab : Software Development Agency Portfolio.pdfCyanic lab
CyanicLab, an offshore custom software development company based in Sweden,India, Finland, is your go-to partner for startup development and innovative web design solutions. Our expert team specializes in crafting cutting-edge software tailored to meet the unique needs of startups and established enterprises alike. From conceptualization to execution, we offer comprehensive services including web and mobile app development, UI/UX design, and ongoing software maintenance. Ready to elevate your business? Contact CyanicLab today and let us propel your vision to success with our top-notch IT solutions.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
Large Language Models and the End of ProgrammingMatt Welsh
Talk by Matt Welsh at Craft Conference 2024 on the impact that Large Language Models will have on the future of software development. In this talk, I discuss the ways in which LLMs will impact the software industry, from replacing human software developers with AI, to replacing conventional software with models that perform reasoning, computation, and problem-solving.
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Into the Box Keynote Day 2: Unveiling amazing updates and announcements for modern CFML developers! Get ready for exciting releases and updates on Ortus tools and products. Stay tuned for cutting-edge innovations designed to boost your productivity.
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Anthony Dahanne
Les Buildpacks existent depuis plus de 10 ans ! D’abord, ils étaient utilisés pour détecter et construire une application avant de la déployer sur certains PaaS. Ensuite, nous avons pu créer des images Docker (OCI) avec leur dernière génération, les Cloud Native Buildpacks (CNCF en incubation). Sont-ils une bonne alternative au Dockerfile ? Que sont les buildpacks Paketo ? Quelles communautés les soutiennent et comment ?
Venez le découvrir lors de cette session ignite
Navigating the Metaverse: A Journey into Virtual Evolution"Donna Lenk
Join us for an exploration of the Metaverse's evolution, where innovation meets imagination. Discover new dimensions of virtual events, engage with thought-provoking discussions, and witness the transformative power of digital realms."
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
First Steps with Globus Compute Multi-User EndpointsGlobus
In this presentation we will share our experiences around getting started with the Globus Compute multi-user endpoint. Working with the Pharmacology group at the University of Auckland, we have previously written an application using Globus Compute that can offload computationally expensive steps in the researcher's workflows, which they wish to manage from their familiar Windows environments, onto the NeSI (New Zealand eScience Infrastructure) cluster. Some of the challenges we have encountered were that each researcher had to set up and manage their own single-user globus compute endpoint and that the workloads had varying resource requirements (CPUs, memory and wall time) between different runs. We hope that the multi-user endpoint will help to address these challenges and share an update on our progress here.
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns
Unlocking Business Potential: Tailored Technology Solutions by Prosigns
Discover how Prosigns, a leading technology solutions provider, partners with businesses to drive innovation and success. Our presentation showcases our comprehensive range of services, including custom software development, web and mobile app development, AI & ML solutions, blockchain integration, DevOps services, and Microsoft Dynamics 365 support.
Custom Software Development: Prosigns specializes in creating bespoke software solutions that cater to your unique business needs. Our team of experts works closely with you to understand your requirements and deliver tailor-made software that enhances efficiency and drives growth.
Web and Mobile App Development: From responsive websites to intuitive mobile applications, Prosigns develops cutting-edge solutions that engage users and deliver seamless experiences across devices.
AI & ML Solutions: Harnessing the power of Artificial Intelligence and Machine Learning, Prosigns provides smart solutions that automate processes, provide valuable insights, and drive informed decision-making.
Blockchain Integration: Prosigns offers comprehensive blockchain solutions, including development, integration, and consulting services, enabling businesses to leverage blockchain technology for enhanced security, transparency, and efficiency.
DevOps Services: Prosigns' DevOps services streamline development and operations processes, ensuring faster and more reliable software delivery through automation and continuous integration.
Microsoft Dynamics 365 Support: Prosigns provides comprehensive support and maintenance services for Microsoft Dynamics 365, ensuring your system is always up-to-date, secure, and running smoothly.
Learn how our collaborative approach and dedication to excellence help businesses achieve their goals and stay ahead in today's digital landscape. From concept to deployment, Prosigns is your trusted partner for transforming ideas into reality and unlocking the full potential of your business.
Join us on a journey of innovation and growth. Let's partner for success with Prosigns.
How Recreation Management Software Can Streamline Your Operations.pptxwottaspaceseo
Recreation management software streamlines operations by automating key tasks such as scheduling, registration, and payment processing, reducing manual workload and errors. It provides centralized management of facilities, classes, and events, ensuring efficient resource allocation and facility usage. The software offers user-friendly online portals for easy access to bookings and program information, enhancing customer experience. Real-time reporting and data analytics deliver insights into attendance and preferences, aiding in strategic decision-making. Additionally, effective communication tools keep participants and staff informed with timely updates. Overall, recreation management software enhances efficiency, improves service delivery, and boosts customer satisfaction.
In software engineering, the right architecture is essential for robust, scalable platforms. Wix has undergone a pivotal shift from event sourcing to a CRUD-based model for its microservices. This talk will chart the course of this pivotal journey.
Event sourcing, which records state changes as immutable events, provided robust auditing and "time travel" debugging for Wix Stores' microservices. Despite its benefits, the complexity it introduced in state management slowed development. Wix responded by adopting a simpler, unified CRUD model. This talk will explore the challenges of event sourcing and the advantages of Wix's new "CRUD on steroids" approach, which streamlines API integration and domain event management while preserving data integrity and system resilience.
Participants will gain valuable insights into Wix's strategies for ensuring atomicity in database updates and event production, as well as caching, materialization, and performance optimization techniques within a distributed system.
Join us to discover how Wix has mastered the art of balancing simplicity and extensibility, and learn how the re-adoption of the modest CRUD has turbocharged their development velocity, resilience, and scalability in a high-growth environment.
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...informapgpstrackings
Keep tabs on your field staff effortlessly with Informap Technology Centre LLC. Real-time tracking, task assignment, and smart features for efficient management. Request a live demo today!
For more details, visit us : https://informapuae.com/field-staff-tracking/
Accelerate Enterprise Software Engineering with PlatformlessWSO2
Key takeaways:
Challenges of building platforms and the benefits of platformless.
Key principles of platformless, including API-first, cloud-native middleware, platform engineering, and developer experience.
How Choreo enables the platformless experience.
How key concepts like application architecture, domain-driven design, zero trust, and cell-based architecture are inherently a part of Choreo.
Demo of an end-to-end app built and deployed on Choreo.
A Comprehensive Look at Generative AI in Retail App Testing.pdfkalichargn70th171
Traditional software testing methods are being challenged in retail, where customer expectations and technological advancements continually shape the landscape. Enter generative AI—a transformative subset of artificial intelligence technologies poised to revolutionize software testing.
2. Outline • Introduction to NGSIv2
• RESTful-ness
• URL & payload simplification
• Native JSON datatypes
• Text-based attribute value set/get
• Geolocation capabilities
• Datetime support
• Transient entities
• Filtering
• Subscription improvements
• Batch operations
• Working with IDs
• Pagination
• Next things to come
2
3. Two “flavors” of NGSI API
• NGSIv1 (the one you already know )
– Original NGSI RESTful binding of OMA-NGSI
– Implemented in 2013
– Uses the /v1 prefix in resource URL
• NGSIv2
– A revamped, simplified binding of OMA-NGSI
• Simple things must be easy
• Complex things should be possible
• Agile, implementation-driven approach
• Make it as developer-friendly as possible (RESTful, JSON, …)
– Enhanced functionality compared to NGSIv1 (e.g. filtering)
– Stable, ready for production, version already available
• Current NGSIv2 version is Release Candidate 2018.07 http://telefonicaid.github.io/fiware-
orion/api/v2/stable
• New features coming (see last part of this presentation)
– Uses the /v2 prefix in resource URL
• Introduction to NGSIv2
– https://docs.google.com/presentation/d/1_fv9dB5joCsOCHlb4Ld6A-
QmeIYhDzHgFHUWreGmvKU/edit#slide=id.g53c31d7074fd7bc7_0
3
4. The NGSI model is kept as it is in NGSIv2
Attributes
• Name
• Type
• Value
Entity
• EntityId
• EntityType
1 n
“has”
Metadata
• Name
• Type
• Value1 n
“has”
4
5. NGSIv2 status (AKA the “NGSIv2 disclaimer”)
• NGSIv2 is in “release candidate” status
– By "release candidate" we mean that the specification is quite stable
– RC-2018-07 is intended to be the last RC version, prior to the
definitive final version
– Thus, only minor editorial changes (typos, etc.) are expected from
now on. Changes in content and structure are not expected.
5
6. So… when should I use NGSIv1 or NGSIv2?
• In general, it is always preferable to use NGSIv2
• Even if you use NGSIv1, you can still use NGSIv2
functionality and requests
– See “Considerations on NGSIv1 and NGSIv2 coexistence”
section in the Orion manual
6
7. RESTful-ness
• In NGSIv1
– Originally based on OMA-NGSI standard operations, not really
RESTful
• The URL doesn’t identify a resource, but an operation type
• The verb is always POST
• Actually, NGSIv1 is closer to HTTP-based RPC than to RESTful
– An extended set of operations (convenience operations) were
added in a later stage but with “legacy” from standard
operations that make it hard to apply full RESTful principles
• E.g. dual response code
• NGSIv2 has been designed from scratch with RESTful
principles in mind
– Batch operations (similar to standard operations in NGSIv1)
are also provided, but without impacting the RESTful
operations in the API
7
8. RESTful-ness
8
200 OK
...
{
"contextElement" : {
"type" : "",
"isPattern" : "false",
"id" : "Car1"
},
"statusCode" : {
"code" : "404",
"reasonPhrase" : "No context element found",
"details" : "Entity id: /Car1/"
}
}
GET /v1/contextEntities/Car1
404 Not Found
...
{
"error": "NotFound",
"description": "The requested entity has not
been found. Check type and id“
}
GET /v2/entities/Car1
NGSIv1
NGSIv2
both status codes have to be taken into account by
the client in order to detect error conditions,
which increases complexity
only HTTP response code,
following RESTful principles -
simpler to process
Example: get Car1 entity
9. URL & payload simplification
• In NGSIv1 the strict alignment with OMA NGSI involves
complexity and ineffectiveness
– Message payloads include a lot of structural overhead elements not
actually needed
– Response payload in methods that don’t really need a payload from a
semantic point of view (e.g. update operation)
– Unnecessarily long structural elements in URLs
• NGSIv2 simplifies URLs and payload, leading to a much
more lean and less verbose API
9
10. URL & payload simplification
10
POST /v1/contextEntities
...
{
"id": "Car1",
"type": "Car",
"attributes": [
{
"name": "colour",
"type": "Text",
"value": "red"
}
]
}
200 OK
Location: /v2/entities?type=Car
POST /v2/entities
…
{
"id": "Car1",
"type": "Car",
"colour": {
"value": "red",
"type": "Text",
}
}
NGSIv1
NGSIv2
Most of the NGSIv1 response payload is
useless: clients only need to know the
status code. In NGSIv2 the response has
no payload at all
shorter URLs in
NGSIv2
200 OK
...
{
"contextResponses": [
{
"attributes": [
{
"name": "colour",
"type": "float",
"value": ""
}
],
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}
],
"id": "Car1",
"isPattern": "false",
"type": “Car"
}
structural
overhead
Example: create Car1
entity (type Car) with
attribute colour set to
“Red”
11. URL & payload simplification
11
GET /v1/contextEntities/type/Car/id/Car1/attributes/colour GET /v2/entities/Car1/attrs/colour?type=Car
NGSIv1 NGSIv2
redundant (already part of the request URL)
200 OK
...
{
"attributes": [
{
"name": "colour",
"type": "Text",
"value": " red"
}
],
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}
mostly useless
200 OK
...
{
"value": "red",
"type": "Text",
"metadata": {}
}
shorter URL in
NGSIv2
structural
overhead
Example: get attribute
colour at Car1 entity
(type Car)
12. URL & payload simplification
• Moreover, NGSIv2 provides simplified data representations
– keyValues: exclude attribute type and metadata
– values: only attribute values (attrs is used to order the values in the
resulting vector)
– unique: like values which in addition removes duplicate values
• Not only for retrieval operations, also for creation/update
operations
– Default attribute types are used in that case
12
GET /v2/entities/Car1/attrs?options=keyValues
200 OK
...
{
"model": "Ford",
"colour": "red",
"temp": 22
}
GET /v2/entities/Car1/attrs?options=values&attrs=model,colour,temp
200 OK
...
["Ford", "red", 22]
Example: get attribute
colour at Car1 entity (type
Car)
13. Native JSON datatypes
• In NGSIv1
– All attribute values are string based to align with XML encoding
• At the end, XML support was removed (in Orion 1.0.0), but it left
an awful legacy
– Although creation/update operations can use numbers, bool,
etc. at the end they are transformed to strings and stored in
that way internally (*)
– Retrieve operation always provides string encoded values (**)
• NGSIv2 fully supports all the types described in the JSON
specification (string, number, boolean, object, array and
null)
13
(*) Except if NGSIv1 autocast feature is used, for some types (see https://fiware-
orion.readthedocs.io/en/master/user/ngsiv1autocast/index.html)
(**) Exception: entities created/updated with NGSIv2 (which support native types) and retrieved
with NGSIv1 will render without stringification.
14. Native JSON datatypes
1414
POST /v1/contextEntities
...
{
"id": "Car1",
"type": "Car",
"attributes": [
{
"name": "speed",
"type": "Number",
"value": 98
}
]
}
POST /v2/entities?options=keyValues
…
{
"id": "Car1",
"type": "Car",
"speed": 98,
"isActive": true
}
NGSIv1
NGSIv2
created as
number but
retrieved as
string… weird!
GET /v1/contextEntities/Car1/attributes/speed
...
{
"attributes": [
{
"name": "speed",
"type": "Number",
"value": "98"
}
],
"statusCode": { … }
}
GET /v2/entities/Car1/attrs?options=keyValues
…
{
"speed": 98,
"isActive": true
}
coherent result
Example: create Car1
entity (type Car) with
attribute speed set to 98
15. Text-based attribute value set/get
• In NGSIv1
– There is no similar functionality
• NGSIv2 offers set/get attribute access directly without
anything else than the attribute value itself in the
request/response payload
– In the set operation, attribute type and metadata are kept as they are
15
PUT /v2/entities/Car1/attrs/speed/value
Content-Type: text/plain
…
86
GET /v2/entities/Car1/attrs/speed/value
200 OK
Content-Type: text/plain
…
86200 OK
…
Example: set speed attribute
value at Car1 entity
Example: get speed attribute
value at Car1 entity
16. Geolocation capabilities
• In NGSIv1
– Entity location must be a point
– Queries are based on an area specification (circle or polygon, inner or
outer area)
– Query as part of queryContext payload scope
• In NGSIv2
– In addition to point, entity location can be a line, box, polygon or
arbitrary GeoJSON
– Queries are based on a spatial relationship and a geometry
• Spatial relationships: near (max and min distance), coveredBy, intersect,
equal and disjoint
• Geometries: point, line, box, polygon
– Query as part of URL (more user-friendly than payload-based
approach)
16
17. Geolocation capabilities
17
NGSIv1
NGSIv2
Much easier and more compact in NGSIv2
POST /v1/queryContext
…
{
"entities": [
{
"type": "City",
"isPattern": "true",
"id": ".*"
}
],
"restriction": {
"scopes": [
{
"type" : "FIWARE::Location",
"value" : {
"circle": {
"centerLatitude": "40.418889",
"centerLongitude": "-3.691944",
"radius": "13500"
}
}
}
]
}
}
GET /v2/entities?
idPattern=.*&
type=City&
georel=near;maxDistance:13500&
geometry=point&
coords=40.418889,-3.691944
Example: retrieve all entities of type
“City” (no matter the id) whose
distance to Madrid city center (GPS
coordinates 40.418889,-3691944) is
less than 13.5 km
18. Geolocation capabilities
18
Point location
(the only one supported by NGSIv1)
POST /v2/entities
{
"id": "E",
"type": "T",
"location": {
"type": "geo:json",
"value": {
"type": "Polygon",
"coordinates": [ [ [2, 1], [4, 3], [5, -1], [2, 1] ] ]
} } }
POST /v2/entities
{
"id": "E",
"type": "T",
"location": {
"type": "geo:polygon",
"value": [ "2, 2", "8, 7", "-1, 4", "2, 2"]
}
}
POST /v2/entities
{
"id": "E",
"type": "T",
"location": {
"type": "geo:box",
"value": [ "2, 2", "8, 7" ]
}
}
POST /v2/entities
{
"id": "E",
"type": "T",
"location": {
"type": "geo:point",
"value": "40.41,-3.69"
}
}
POST /v2/entities
{
"id": "E",
"type": "T",
"location": {
"type": "geo:line",
"value": [ "2, 2", "8, 7" ]
}
}
Line location (e.g. a street) Box location (e.g. a squared building)
Polygon location (e.g. a city district) GeoJSON geometry (full flexibility)
19. Datetime support
• In NGSIv1
– There is no support for attributes meaning dates, they
are treated as conventional strings
• NGSIv2 implements date support
– Based on ISO ISO8601 format, including partial
representations and timezones
• See https://fiware-
orion.readthedocs.io/en/master/user/ngsiv2_implementati
on_notes/index.html#datetime-support for syntax details
– Use reserved attribute type DateTime to express a date
– Date-based filters are supported
19
20. Datetime support
• Attribute value arithmetic filters can be used with dates as if they
were numbers
• Entity dateModified and dateCreated special attributes, to get
entity creation and last modification timestamps
– They are shown in query responses using
attrs=dateModified,dateCreated
• Entity dateModified and dateCreated special metadata, to get
attribute creation and last modification timestamps
– They are shown in query responses using
metadata=dateModified,dateCreated
20
POST /v2/entities
…
{
"id": "John",
"birthDate": {
"type": "DateTime",
"value": "1979-10-14T07:21:24.238Z"
}
}
GET /v2/entities?q=birthDate<1985-01-01T00:00:00
Example: create entity John,
with birthDate attribute using
type DateTime
21. Transient entities
• In NGSIv1
– There is no support for transient entities
• NGSIv2 implements transient entities
– Attribute dateExpires (of type DateTime) provided at
creation/update time, with special semantic: once that
time is reached, the entity is expired
– What “expires” means depends on implementation
• In the case of Orion, expired entities are automatically removed
(check Orion documentation for more detail)
– Date-based filters are supported also for dateExpires
attribute
21
22. Filtering
• In NGSIv1
– Limited filtering functionality, much of it based on queryContext
complex scopes
– Filters are not supported in subscriptions
• In NGSIv2 the mechanism
– Is simpler (see next slide)
– Can be applied to both queries and subscriptions (described in a later
topic of this presentation)
22
POST /v1/queryContext
…
{
"restriction": {
"scopes": [
{
"type" : "FIWARE::StringFilter",
"value" : "temp<24"
…
}
This is the only interesting
part, all the rest is
structural overhead
Example: filtering entities
which temperature is less
than 24
23. • For the GET /v2/entities operation, retrieve all entities…
– … of a given entity type
– … whose entity id is in a list
– ... whose entity id match a regex pattern
• Example: the id starts with “Room” followed by a digit from 2 to 5
– … with an attribute that matches a given expression
• Example: attribute temp is greater than 25
• Filters can be used simultaneously (i.e. like AND condition)
23
GET /v2/entities?type=Room
GET /v2/entities?id=Room1,Room2
GET /v2/entities?idPattern=^Room[2-5]
Filtering
GET /v2/entities?q=temp>25
supported operators:
• == (or :), equal
• !=, unequal
• >, greater than
• <, less than
• >=, greater than or
equal
• <=, less than or equal
• A..B, range
• ^=, pattern (regex)
• Existence/inexistence
24. • For the GET /v2/entities operation, retrieve all entities…
– ... whose entity type match a regex pattern
– … with an attribute which sub-key matches a given expression
– … with an attribute metadata that matches a given expression
– … with an attribute metadata which sub-key matches a given
expression
24
GET /v2/entities?q=tirePressure.frontRight >130
attribute name attribute sub-key (for compound
attribute values only)
GET /v2/entities?mq=temperature.avg>25
GET /v2/entities?mq=tirePressure.accuracy.frontRight >90
metadata sub-key (for compound
metadata values only)
metadata name
Filtering
GET /v2/entities?typePattern=T[ABC]
25. • By default all attribute are included in query
responses or notifications
• The attrs field (as parameter in GET operations
and as notification sub-field in subscriptions)
can be used to specify a filtering list
• The attrs field can be also used to explicitly
include some special attributes (not included by
default)
– dateCreated: entity creation date
– dateModified: entity last modification date
– dateExpires: entity expiration date
• The “*” can be used as an alias of “all the
(regular) attributes”
25
Attributes filtering and special attributes
26. • Examples
– Include only attributes temp and lum
• In queries: GET /v2/entities?attrs=temp,lum
• In subscriptions: "attrs": [ "temp", "lum" ]
– Include dateCreated and not any other attribute
• In queries: GET /v2/entities?attrs=dateCreated
• In subscriptions: "attrs": [ "dateCreated" ]
– Include dateModified and all the other (regular)
attributes
• In queries: GET /v2/entities?attrs=dateModified,*
• In subscriptions: "attrs": [ "actionType", "*" ]
– Include all attributes (same effect that not using attrs,
not very interesting)
• In queries: GET /v2/entities?attrs=*
• In subscriptions: "attrs": [ "*" ]
26
Attributes filtering and special attributes
27. • By default all attribute metadata are included in query responses
and notifications
• The metadata field (as parameter in GET operations and as
notification sub-field in subscriptions) can be used to specify a
filtering list
• The metadata field can be also used to explicitly include some
special metadata (not included by default)
– dateCreated, dateModified: attribute creation or last modification
date
– actionType: which value is the action type corresponding to the
update triggering the notification: “update”, “append” or “delete” (*)
– previousValue: which provides the value of the attribute previous to
processing the update that triggers the notification
• The “*” can be used as an alias of “all the (regular) metadata”
27
(*) actionType “delete” not yet supported by Orion in 1.15.0.
Metadata filtering and special metadata
28. • Examples
– Include only metadata MD1 and MD2
• In queries: GET /v2/entities?metadata=MD1,MD2
• In subscriptions: "metadata": [ "MD1", "MD2" ]
– Include previousValue and not any other metadata
• In queries: GET /v2/entities?metadata=previousValue
• In subscriptions: "attrs": [ "previousValue" ]
– Include actionType and all the other (regular) metadata
• In queries: GET /v2/entities?metadata=actionType,*
• In subscriptions: "attrs": [ "actionType", "*" ]
– Include all metadatata (same effect that not using
metadata, not very interesting)
• In queries: GET /v2/entities?metadata=*
• In subscriptions: "metadata": [ "*" ]
28
Metadata filtering and special metadata
29. Subscription improvements
• NGSIv1 context subscription API is very limited
– There is no operation to list existing subscriptions
• If a client loses the ID of created subscriptions, there is no way to retrieve
them through the API
– No support for permanent subscriptions
• Creating absurdly long subscriptions (e.g. 100 years) is a dirty workaround
– Fix notification structure
• Difficult to integrate to arbitrary endpoints (e.g. public REST services)
– No support for filters
• NGSIv2 subscription API solves all these limitations and
introduces some additional enhancements
– Notification attributes based on “blacklist” (in addition to the
“whitelist” approach in NGSIv1)
– Ability to pause/resume subscriptions
– Extra fields: times sent, last notification and description
29
30. Anatomy of a NGSIv2 subscription
30
POST /v2/subscriptions
…
{
"subject": {
"entities": [
{
"id": "Room1",
"type": "Room"
}
]
},
"condition": {
"attrs": [ "temp" ]
},
"notification": {
"http": {
"url": "http://<host>:<port>/publish"
},
"attrs": [ "temp" ]
},
"expires": "2026-04-05T14:00:00.00Z",
"throttling": 5
}
201 Created
Location: /v2/subscriptions/51c0ac9ed714fb3b37d7d5a8
...
POST /v1/subscribeContext
…
{
"entities": [
{
"type": "Room",
"isPattern": "false",
"id": "Room1"
}
],
"attributes": [ "temp“ ],
"reference": "http://<host>:<port>/publish",
"duration": "P1M",
"notifyConditions": [
{
"type": "ONCHANGE",
"condValues": [ "temp" ]
}
],
"throttling": "PT5S"
}
200 OK
...
{ "subscribeResponse": {
"duration": "P1M",
"subscriptionId": "51c0ac9ed714fb3b37d7d5a8",
"throttling": "PT5S"
} }
NGSIv1 NGSIv2
Simpler response
(no payload)
Simpler way of specifying
expiration and throttling
in NGSIv2
Redundant Example: subscribe to
Room1 entity, so
whenever a change
occurs in the temp
attribute a notification
including only temp is
sent
31. List subscriptions and special fields in NGSIv2
• List operations (not available in NGSIv1)
– GET /v2/subscriptions lists all subscriptions
– GET /v2/subscriptions/<id> retrieves information of a particular
subscription
• Whitelist vs. blacklist (in the notification field)
– Use "attrs": [ "A", "B" ] to “include A and B in the notification”
(whitelist)
– Use "exceptAttrs": [ "A", "B" ] to “include all the attributes except
A and B” (blacklist)
– Use "attrs": [ ] to include “all the attributes” (special case)
• Other informative fields (in the notification field)
– timesSent: the number of times that the subscription has been
triggered and a notification has been sent
– lastNotification: datetime corresponding to the last notification
• Other informative fields (at root level)
– description, free text descriptive text for user convenience
31
32. Permanent and paused subscriptions in NGSIv2
• The status attribute can be used to pause/resume
subscriptions
• In GET operations, the status field can be
– active: subscription is active (notifications will be sent)
– inactive: subscription is inactive (notifications will not be sent)
– expired: subscription is expired (notifications will not be sent)
– failed: described in next slide
32
PATCH /v2/subscriptions/<id>
…
{
"status": "active"
}
PATCH /v2/subscriptions/<id>
…
{
"status": "inactive"
}
To pause To resume
33. • Status failed means that last
attempt to notify failed
– E.g. the endpoint is not reachable
• Detailed information in the
notifications element
– timesSent: total number of
notifications attempts (both
successful and failed)
– lastSuccess: last time that
notification was successfully sent
– lastFailure: last time that
notification was tried and failed
– lastNotification: last time the
notification was sent (either success
or failure)
• Corollary: lastNotification value is the
same than either lastFailure or
lastSuccess
33
200 OK
Content-Type: application/json
…
[{
"id": " 51c0ac9ed714fb3b37d7d5a8 ",
"expires": "2026-04-05T14:00:00.00Z",
"status": "failed",
"subject": { … },
"notification": {
"timesSent": 3,
"lastNotification": "2016-05-31T11:19:32.00Z",
"lastSuccess": "2016-05-31T10:07:32.00Z",
"lastFailure": "2016-05-31T11:19:32.00Z",
…
}
}]
Notification status
34. Notification formats in NGSIv2
• The optional attrsFormat field can be used to choose between different notification
flavors, aligned with the representation modes
• Notifications include the NGSIv2-AttrsFormat header to help the receiver identify
the format
• legacy can be used as value for attrsFormat in order to send notifications in
NGSIv1 format
– Very useful when integrating legacy notification endpoints
34
{
"subscriptionId": "12345",
"data": [
{
"id": "Room1",
"type": "Room",
"temperature": {
"value": 23,
"type": "Number",
"metadata": {}
}
}
]
}
{
"subscriptionId": "12345",
"data": [
{
"id": "Room1",
"type": "Room",
"temperature": 23
}
]
}
{
"subscriptionId": "12345",
"data": [ [ 23 ] ]
}
normalized (default) keyValues values
Outer vector represent the list of
entities, inner vector the values of
the attribute of each entity (not too
interesting in this single-entity
single-attribute example)
35. Custom notifications in NGSIv2
• Apart from the standard formats defined in the
previous slide, NGSIv2 allows to re-define all the
notification aspects
• httpCustom is used (instead of http) with the
following subfields
– URL query parameters
– HTTP method
– HTTP headers
– Payload (not necessarily JSON!)
• A simple macro substitution language based on ${..}
syntax can be used to “fill the gaps” with entity data (id,
type or attribute values)
35
36. Custom notifications in NGSIv2
36
…
"httpCustom": {
"url": "http://foo.com/entity/${id}",
"headers": {
"Content-Type": "text/plain"
},
"method": "PUT",
"qs": {
"type": "${type}"
},
"payload": "The temperature is ${temp} degrees"
}
…
PUT http://foo.com/entity/DC_S1-D41?type=Room
Content-Type: text/plain
Content-Length: 31
The temperature is 23.4 degrees
PUT /v2/entities/DC_S1-D41/attrs/temp/value?type=Room
…
23.4
Custom notification configuration
update
notification
Example: send a text
notification (i.e. not
JSON) with temperature
value, using the entity id
and type as part of the
URL
37. 37
POST /v2/subscriptions
…
{
"subject": {
"entities": [
{
"id": "Truck11",
"type": "RoadVehicle"
},
{
"idPattern": "^Car[2-5]",
"type": "RoadVehicle"
}
],
"condition": {
"attrs": [ "speed" ],
"expression": {
"q": "speed>90",
"georel": "near;maxDistance:100000",
"geometry": "point",
"coords": "40.418889,-3.691944"
}
}
},
…
}
• Filters (described in previous
slides) can be also used in
subscriptions
– id
– type
– id pattern
– attribute values
– geographical location
Subscription filters in NGSIv2
Example: subscribe to speed changes in
entities with id Truck11 or Car2 to Car5 (both
case of type RoadVehicle) whenever speed is
greater than 90 and the vehicle distance to
Madrid city center is less than 100 km
38. 38
POST /v2/subscriptions
…
{
"subject": {
"entities": [
{
"idPattern": ".*",
"typePattern": ".*Vehicle"
},
],
"condition": {
"attrs": [ "speed" ],
"expression": {
"q": "speed>90",
"mq": "speed.average==80..100",
"georel": "near;maxDistance:100000",
"geometry": "point",
"coords": "40.418889,-3.691944"
}
}
},
…
}
• They can be used also in
subscriptions
– type pattern
– metadata value
Subscription filters in NGSIv2
Example: subscribe to speed changes in any
entities of any type ending with Vehicle (such
as RoadVehicle, AirVehicle, etc.) whenever
speed is greater than 90 its average metadata
is between 80 and 90 and the vehicle distance
to Madrid city center is less than 100 km
39. Batch operations
• In NGSIv1 we have standard operations
– POST /v1/updateContext
– POST /v1/queryContext
• Similar but more user-friendly operations have
been included in NGSIv2
– POST /v2/op/update
– POST /v2/op/query
39
40. Batch operations
40
POST /v1/updateContext
…
{
"updateAction": "APPEND“,
"contextElements": [
{
"type": "Room",
"isPattern": "false",
"id": "Room1",
"attributes": [
{
"name": "temp",
"type": "float",
"value": "29"
}
]
}
]
}
POST /v2/op/update
{
"actionType": "append",
"entities": [
{
"type": "Room",
"id": "Room1",
"temperature":
{
"type": "Number",
"value": 29
}
}
]
}
201 Created
NGSIv1 NGSIv2
structural
overhead
200 OK
...
{
"contextResponses" : [ … ],
"statusCode" : {
"code" : "200",
"details" : "OK"
}
}
NGSIv2 response doesn’t
have any payload at all
lots of useless
stuff here
Example: create
Room1 entity (type
Room) with attribute
temp set to 29
41. Batch operations
41
POST /v1/queryContext
…
{
"entities": [
{
"type": "Room",
"isPattern": "true",
"id": ".*"
} ,
"attributes": [ "temp" ]
]
}
POST /v2/op/query
…
{
"entities": [
{
"idPattern": ".*",
"type": "T"
}
],
"attrs": [ "temp" ]
}
NGSIv1
NGSIv2
Requests are more or
less the same, but the
simplicity of NGSIv2
becomes evident
when comparing
responses
200 OK
...
{
"contextResponses": [
{
"contextElement": {
"attributes": [
{
"name": "temp",
"type": "Number",
"value": "25"
}
],
"id": "Room1",
"isPattern": "false",
"type": "Room"
},
"statusCode": { … }}
]
}
200 OK
...
[
{
"id": "Room1",
"type": "Room",
"temp": {
"type": "Number",
"value": 25
}
}
]
Example: get
temp attribute of
all entities with
type Room
42. Batch query scope
• This is the way of including q,
mq and geo filters (typically
used as URL param of a GET
operation) in a batch query
42
POST /v2/op/query
…
{
"entities": [
{
"idPattern": ".*",
"type": "T"
}
],
"attrs": [ "temp" ],
"expression": {
"q": "temp>40",
"georel": "near;maxDistance:20000",
"geometry": "point",
"coords": "40.31,-3.75"
}
}
Example: get all entities of type T
with the attribute temp as long as
that attribute is greater than 40 and
the entity distance to coordinates
(40.31, -3.75) is less than 20 km
43. Pagination
• In NGSIv1
– based on limit, offset and details
– Dirty workaround to fit count into NGSIv1
payloads, using an errorCode for something
that actually is not an error and forcing to
text based processing of the details field
– Fixed order: always by creation date
• In NGSIv2
– based on limit, offset and options=count
• This part doesn’t change too much
– Cleaner and easier way of returning count,
with the Fiware-Total-Count HTTP header
in the response
– Configurable ordering based on orderBy
parameter
• See details in the NGSIv2 specification
43
"errorCode": {
"code": "200",
"details": "Count: 322",
"reasonPhrase": "OK"
}
Fiware-Total-Count: 322
44. Working with IDs
• In NGSIv1
– Fields such as entity id, attribute name, etc. may have any value (*)
– This could cause a lot of problems as these fields use to act as IDs in
many places when propagated through notifications
• E.g. Cygnus MySQL sink may have problems when these fields are mapped
to tables names, whose allowed charset is very strict
– In addition, NGSIv1 allows ids or attribute names as "" (empty string)
which is weird and typically an error condition in the client
• NGSIv2 establishes a set of restrictions to ensure sanity in the
usage of ID fields. In particular:
– Allowed characters are those in the plain ASCII set, except the following ones:
control characters, whitespace, &, ?, / and #.
– Maximum field length is 256 characters.
– Minimum field length is 1 character.
– The rules above apply to the following six fields (identified as ID fields): entity
id, entity type, attribute name, attribute type, metadata name, metadata type
44
(*) Excluding the forbidden characters described in the Orion manual, which are general for all the fields in both
NGSIv1 and NGSIv2 APIs
45. Useful references
• Introduction to NGSI and Orion
– https://github.com/telefonicaid/fiware-orion#introductory-
presentations
• Orion Manual
– https://fiware-orion.readthedocs.io
• Orion page at FIWARE Catalogue
– http://catalogue.fiware.org/enablers/publishsubscribe-
context-broker-orion-context-broker
• NGSIv2 specs
– http://fiware.github.io/specifications/ngsiv2/stable
– http://fiware.github.io/specifications/ngsiv2/latest
• Orion support at StackOverflow
– Look for existing questions at
http://stackoverflow.com/questions/tagged/fiware-orion
– Ask your questions using the “fiware-orion” tag
• FIWARE Tour Guide Application
– https://github.com/fiware/tutorials.TourGuide-App
45