Std.UriTemplate
0.0.45
See the version list below for details.
dotnet add package Std.UriTemplate --version 0.0.45
NuGet\Install-Package Std.UriTemplate -Version 0.0.45
<PackageReference Include="Std.UriTemplate" Version="0.0.45" />
<PackageVersion Include="Std.UriTemplate" Version="0.0.45" />
<PackageReference Include="Std.UriTemplate" />
paket add Std.UriTemplate --version 0.0.45
#r "nuget: Std.UriTemplate, 0.0.45"
#:package Std.UriTemplate@0.0.45
#addin nuget:?package=Std.UriTemplate&version=0.0.45
#tool nuget:?package=Std.UriTemplate&version=0.0.45
std-uritemplate
This is intended to become a complete and maintained cross-language implementation of the Uri Template specification RFC 6570 Level 4.
Available implementations
Language | Complete | Reviewed | Published |
---|---|---|---|
Java | ✅ | ✅ | ✅ |
Python | ✅ | ❌ | ✅ |
Typescript | ✅ | ✅ | ✅ |
Go | ✅ | ✅ | ✅ |
C# | ✅ | ✅ | ✅ |
Ruby | ✅ | ❌ | ✅ |
PHP | ✅ | ✅ | ✅ |
Swift | ✅ | ❌ | ✅ |
Usage
Java
You can use the library as a Maven dependency:
<dependency>
<groupId>io.github.std-uritemplate</groupId>
<artifactId>std-uritemplate</artifactId>
<version>REPLACE-ME</version>
</dependency>
in Gradle:
implementation 'io.github.std-uritemplate:std-uritemplate:REPLACE-ME'
and use it in your project:
import io.github.stduritemplate.StdUriTemplate;
...
StdUriTemplate.expand(template, substitutions);
Python
Install the package with pip
(or any alternative):
pip install std-uritemplate
Use the library in your project:
from stduritemplate import StdUriTemplate
...
StdUriTemplate.expand(template, substitutions)
Typescript/Javascript
Install the package using npm
:
npm i @std-uritemplate/std-uritemplate
Use the package:
const { StdUriTemplate } = require('@std-uritemplate/std-uritemplate');
...
StdUriTemplate.expand(template, substitutions);
Go
Install the package:
go get github.com/std-uritemplate/std-uritemplate/go
and use it:
import stduritemplate "github.com/std-uritemplate/std-uritemplate/go"
...
stduritemplate.Expand(template, substitutions)
C#
Install the package:
dotnet add package Std.UriTemplate
and use it:
Std.UriTemplate.Expand(template, substitutions);
Ruby
Install the package:
gem install stduritemplate
and use it:
require 'stduritemplate'
...
StdUriTemplate.expand(template, substitutions)
PHP
Install the package:
composer require stduritemplate/stduritemplate
and use it:
use StdUriTemplate\StdUriTemplate;
...
StdUriTemplate::expand($template, $substitutions);
Swift
Install the package, adding to Package.swift
:
let package = Package(
...
dependencies: [
...
.package(
url: "https://github.com/std-uritemplate/std-uritemplate-swift.git",
from: "0.0.26"
)
],
targets: [
.executableTarget(
...
dependencies: [
...
.product(name: "stduritemplate",
package: "std-uritemplate-swift")
]
...
),
]
)
and use it:
import stduritemplate
...
StdUriTemplate.expand(template, substitutions: substs)
Design decisions
We have a set of design decisions to guide:
- zero dependencies
- no usage of regexp
- no options/configurations
- only single expansion will be supported
- single method public API
- no language idiomatic API, only 1 low level primitive - we do encourage language-specific wrapper/alternative libraries
- portable implementation across languages based on widely available patterns
- target Level support is 4 (should pass all the canonical tests)
- favor maintenance and readability
- performance until they compromise readability
- one implementation per ecosystem/runtime (e.g. 1 implementation in Java and no Kotlin/Scala/Closure, 1 in TS that will serve JS as well etc.)
- substitutions will be performed for primitive types and date-time
API
The public API is composed by a single method(in Java for simplicity):
String expand(String template, Map<String, Object> substitutions)
all the rest, should not be directly accessible.
Motivation
<img alt="alt_text" src="https://imgs.xkcd.com/comics/dependency.png" />
In the Kiota project they are using Uri Templates to build URLs, and we have already spent enough life-time dealing with:
- unmaintained projects
- scarce feedback from maintainers
- long release cycles
- different nuances in different implementations
- quirks and integration issues
- frameworks and additional dependencies
- diamond transitive dependencies
We aim to do it differently, by reducing maintenance to a minimum by automating it, and sharing responsibilities to reduce the bus/truck factor:
- single repository
- multiple implementations
- fully automated testing standardized
- fully automated releases on tag
- same tradeoffs across languages
- familiar implementation across languages
- multiple maintainers in an independent organization
Uri Template is(likely) going to be included in the next OpenAPI specification and we need to rely on a (more) solid foundation to prevent our selves to spend long, tedious hours and days chasing hidden bugs, verifying compatibilities and waiting for unresponsive maintainers.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Std.UriTemplate:
Package | Downloads |
---|---|
Microsoft.Kiota.Abstractions
Abstractions library for the Kiota generated SDKs in dotnet. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Std.UriTemplate:
Repository | Stars |
---|---|
Kyrodan/KeeAnywhere
A cloud storage provider plugin for KeePass Password Safe
|
Version | Downloads | Last Updated |
---|---|---|
2.0.5 | 207,333 | 5/14/2025 |
2.0.4 | 438 | 5/14/2025 |
2.0.3 | 68,127 | 2/7/2025 |
2.0.2 | 1,600 | 2/6/2025 |
2.0.1 | 11,981,326 | 11/12/2024 |
2.0.0 | 608,705 | 9/30/2024 |
1.0.6 | 5,034,442 | 8/30/2024 |
1.0.5 | 824,315 | 7/24/2024 |
1.0.3 | 310,669 | 7/3/2024 |
1.0.2 | 5,186 | 6/26/2024 |
1.0.1 | 241,723 | 6/11/2024 |
1.0.0 | 483 | 6/11/2024 |
0.0.59 | 1,870 | 6/7/2024 |
0.0.58 | 345 | 6/7/2024 |
0.0.57 | 8,262,802 | 4/18/2024 |
0.0.56 | 64,540 | 4/11/2024 |
0.0.55 | 1,989,870 | 3/18/2024 |
0.0.54 | 858,643 | 2/27/2024 |
0.0.53 | 212,041 | 2/15/2024 |
0.0.52 | 2,739 | 2/9/2024 |
0.0.50 | 5,736,251 | 1/8/2024 |
0.0.49 | 7,684 | 12/12/2023 |
0.0.48 | 118,054 | 11/29/2023 |
0.0.47 | 3,854 | 11/20/2023 |
0.0.46 | 3,658,931 | 10/19/2023 |
0.0.45 | 351 | 10/19/2023 |
0.0.44 | 1,155 | 10/17/2023 |
0.0.43 | 2,252 | 10/12/2023 |
0.0.42 | 89,719 | 9/20/2023 |
0.0.41 | 340 | 9/19/2023 |
0.0.40 | 391 | 9/7/2023 |
0.0.39 | 404 | 9/6/2023 |
0.0.38 | 336 | 9/4/2023 |
0.0.36 | 398 | 9/4/2023 |
0.0.35 | 348 | 9/4/2023 |
0.0.34 | 340 | 9/4/2023 |
0.0.32 | 366 | 9/4/2023 |
0.0.31 | 378 | 8/31/2023 |
0.0.30 | 377 | 8/31/2023 |
0.0.15 | 390 | 8/30/2023 |
0.0.14 | 400 | 8/29/2023 |
0.0.13 | 558 | 8/29/2023 |