Я работаю над проектом, который использовал GRPC microservices. Обычно GRPC использовал protobuf в качестве метода по умолчанию для сериализации данных. Но мы используем JSON вместо protobuf. В общем, мы определили сообщение и сервисы в protobuf и выполнили protoc , затем слили сгенерированный файл с проектом. Но каким-то образом Google сделал жестким объединение JSON в GRPC. Я подумал, что Google должен создать такую документацию (https://grpc.io/blog/grpc-with-json) для разработчика iOS). Но, к сожалению, в Swift нет отдельной документации. Мне было трудно использовать тип JSON в GRPC. Как я буду вызывать методы в КЛИЕНТСКАЯ СТОРОНА код в Swift?
Я хочу передать две переменные (data: String, idToken: String), т.е. определенные в структуре запроса после того, как эти службы должны дать мне Response . Таким образом, я бы понял метод get и post, используемый в GRPC.
https://grpc.io/blog/grpc-with-json, В этой ссылке мы можем проверить, как java работает с JSON + GRPC. Я добавляю этот пример кода Java для большего понимания того, что я хочу сделать в Swift, может быть, это поможет.
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import io.grpc.MethodDescriptor;
public class UserManagerRpcGson {
private static final String SERVICE_NAME = "url";
public static final class Request {
public String data;
public String idToken;
}
public static final MethodDescriptor<Request, Response> REGISTER_METHOD =
MethodDescriptor.newBuilder(
marshallerFor(Request.class),
marshallerFor(Response.class))
.setFullMethodName(
MethodDescriptor.generateFullMethodName(SERVICE_NAME, "registerUser"))
.setType(MethodDescriptor.MethodType.UNARY)
.setSampledToLocalTracing(true)
.build();
static <T> MethodDescriptor.Marshaller<T> marshallerFor(Class<T> clz) {
return new MethodDescriptor.Marshaller<T>() {
@Override
public InputStream stream(T value) {
return new ByteArrayInputStream(GsonUtil.gson.toJson(value, clz).getBytes(StandardCharsets.UTF_8));
}
@Override
public T parse(InputStream stream) {
return GsonUtil.gson.fromJson(new InputStreamReader(stream, StandardCharsets.UTF_8), clz);
}
};
}
}