Std.UriTemplate
0.0.38
See the version list below for details.
dotnet add package Std.UriTemplate --version 0.0.38
NuGet\Install-Package Std.UriTemplate -Version 0.0.38
<PackageReference Include="Std.UriTemplate" Version="0.0.38" />
paket add Std.UriTemplate --version 0.0.38
#r "nuget: Std.UriTemplate, 0.0.38"
// Install Std.UriTemplate as a Cake Addin #addin nuget:?package=Std.UriTemplate&version=0.0.38 // Install Std.UriTemplate as a Cake Tool #tool nuget:?package=Std.UriTemplate&version=0.0.38
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:
using stduritemplate;
...
StdUriTemplate.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:
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. |
.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 (2)
Showing the top 2 NuGet packages that depend on Std.UriTemplate:
Package | Downloads |
---|---|
Microsoft.Kiota.Abstractions
Abstractions library for the Kiota generated SDKs in dotnet. |
|
WATGx.Common.Data
WATGx library |
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.1 | 513,828 | 11/12/2024 |
2.0.0 | 195,754 | 9/30/2024 |
1.0.6 | 2,545,040 | 8/30/2024 |
1.0.5 | 525,806 | 7/24/2024 |
1.0.3 | 194,860 | 7/3/2024 |
1.0.2 | 3,242 | 6/26/2024 |
1.0.1 | 158,907 | 6/11/2024 |
1.0.0 | 264 | 6/11/2024 |
0.0.59 | 1,294 | 6/7/2024 |
0.0.58 | 199 | 6/7/2024 |
0.0.57 | 5,589,634 | 4/18/2024 |
0.0.56 | 36,061 | 4/11/2024 |
0.0.55 | 1,400,268 | 3/18/2024 |
0.0.54 | 622,684 | 2/27/2024 |
0.0.53 | 138,460 | 2/15/2024 |
0.0.52 | 2,194 | 2/9/2024 |
0.0.50 | 4,197,554 | 1/8/2024 |
0.0.49 | 6,191 | 12/12/2023 |
0.0.48 | 101,766 | 11/29/2023 |
0.0.47 | 3,634 | 11/20/2023 |
0.0.46 | 3,033,073 | 10/19/2023 |
0.0.45 | 280 | 10/19/2023 |
0.0.44 | 1,073 | 10/17/2023 |
0.0.43 | 2,170 | 10/12/2023 |
0.0.42 | 85,031 | 9/20/2023 |
0.0.41 | 274 | 9/19/2023 |
0.0.40 | 312 | 9/7/2023 |
0.0.39 | 318 | 9/6/2023 |
0.0.38 | 277 | 9/4/2023 |
0.0.36 | 320 | 9/4/2023 |
0.0.35 | 282 | 9/4/2023 |
0.0.34 | 276 | 9/4/2023 |
0.0.32 | 297 | 9/4/2023 |
0.0.31 | 303 | 8/31/2023 |
0.0.30 | 313 | 8/31/2023 |
0.0.15 | 326 | 8/30/2023 |
0.0.14 | 327 | 8/29/2023 |
0.0.13 | 410 | 8/29/2023 |