GithubHelp home page GithubHelp logo

tochka-public / tochka.jsonrpc Goto Github PK

View Code? Open in Web Editor NEW
27.0 2.0 7.0 1.43 MB

JSON RPC 2.0 integration into ASP.NET Core MVC

Home Page: https://tochka-public.github.io/Tochka.JsonRpc

License: MIT License

C# 100.00%
jsonrpc2 asp-net-core json-rpc2 jsonrpc json-rpc

tochka.jsonrpc's Introduction

Tochka.JsonRpc

JSON RPC 2.0 integration into ASP.NET Core MVC

Docs

tochka.jsonrpc's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

tochka.jsonrpc's Issues

PropertyNamingPolicy null walue

I think, we should support unsetted value for JsonRpcServerOptions.DefaultDataJsonSerializerOptions.PropertyNamingPolicy

Today, i use this policy

class UnsetNamingPolicy : JsonNamingPolicy
{
    public override string ConvertName(string name) => name;
}

For example System.Text.Json support null value for policy
https://github.com/dotnet/corefx/blob/e667c29636a622eb4f9493f75232b44e0ae90b29/src/System.Text.Json/src/System/Text/Json/Serialization/JsonPropertyInfo.cs#L106-L119

[OpenRPC] ApiExplorerSettingsAttribute.GroupName is ignored

Setting GroupName with ApiExplorerSettingsAttribute on controller has no effect on OpenRPC result.
JsonRpcDescriptionProvider overrides the value of ApiDescription.GroupName with constant "jsonrpc".

GroupName is used when application has several independed APIs.
Ex:

[ApiExplorerSettings(GroupName = "admin")]
[ApiController]
[Route("/admin/api")]
AdminApiControllerBase : JsonRpcControllerBase
{
}

[ApiExplorerSettings(GroupName = "user")]
[ApiController]
[Route("/user/api")]
UserApiControllerBase : JsonRpcControllerBase
{
}

And in Startup.cs

services.AddOpenRpc(Assembly.GetExecutingAssembly(), options =>
{
options.Docs.Add("jadmin_v1", new OpenRpcInfo("Admin API", "1"));
options.Docs.Add("user_v1", new OpenRpcInfo("User API", "1"));
});

In this case /openrpc/admin_v1.json should return details for Admin API but it returns no methods because JsonRpcDescriptionProvider replaces specified GroupName.

JsonRpcDescriptionProvider should not change GroupName if it was determined by DefaultApiDescriptionProvider

fix by feedback

  • document UseMvc() In Configure method
  • check controller_name.action_name and action_name in docs
  • add examples for different configurations in quickstart

Некорректная (де)сериализация datetime

Задача: задать определенный формат datetime при сериализации/десериализации тела реквестов/респонсов.

Решаться должна тем что имплементим интерфейс IJsonRpcSerializer, в котором в settings добавляем вот эту строку DateFormatString = "yyyy-MM-ddTHH:mm:ssK" //мой кастомный формат
Но оно не работает.

НО, если пойти и в исходниках либы вот это задать для
DateFormatString = "yyyy-MM-ddTHH:mm:ssK" //мой кастомный формат
для HeaderJsonRpcSerializer, то респонсы сериализуются по данному формату.
То есть получается настройки берутся из HeaderJsonRpcSerializer, что есть неверно

Доработки для jsonrpc client

  • сделать флаг HasError для jsonrpcresult

  • сделать метод GetAnyError для jsonrpcresult

  • метод AsError<> сейчас падает если в ответе нет поля data
    Пример - как хотим использовать:
    if (rpcResult.HasError) { var error = rpcResult.GetAnyError(); log.LogError(error); return null; }

  • когда ловим JsonRpcException и делаем ToString(), некорректно отображается Json Rpc Error, полученный от сервиса, к которому обращались.
    Пример:
    JSON Rpc error: Tochka.JsonRpc.Common.Models.Response.Errors.Error 1[Newtonsoft.Json.Linq.JToken]
    Как хотим:
    JSON Rpc error: { code: some-code, message: some-message, data: some-data }

  • когда делаю моки в тестах, не могу сделать что то типа:
    .Throws<JsonRpcException>()
    т.к. must have a public parameterless constructor

Client exception should serialize raw http content

not sure how:

  • what if http content is valid text? bytes? limit to 5kb?
  • passing content reference into context is probably dangerous: we can keep it for a long time
  • can we rewind content stream after reading?
  • is content stream closed after streamreader+jsonreader? can be reopened?
  • can we buffer it while reading?

CORS

Ломается cors. Нет нужных заголовков в респонсах

Serializing into string

Если у метода есть параметр с типом string, но в запросе вместо string передавать допустим int, то он успешно сам конвертится в string и никакой ошибки не выдает.

Метод

public void SomeMethod(string stringParam)
{
   //stringParam has "6277" value
}

Запрос

{
  "id": "1",
  "jsonrpc": "2.0",
  "method": "SomeMethod",
  "params": {
    "stringParam": 6277
  }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.