Visão geral
Preparamos alguns exemplos para ajudar você a implementar sua primeira biblioteca de APIs em sandbox.
Você pode encontrá-los em //sandboxed_api/examples. Confira abaixo explicações detalhadas.
hello_sapi
Este é um exemplo muito básico que ilustra como a SAPI funciona. O
hello_lib.cc
implementa uma função, AddTwoIntegers()
, que será colocada em sandbox e chamada
no código
do host.
O segundo arquivo de código do host, hello_transacted.cc, demonstra um exemplo de uso das transações da SAPI.
Soma
Uma biblioteca de demonstração que implementa algumas funções C e uma única função C++. Ele usa protobufs para trocar dados entre o código do host e a biblioteca SAPI.
- A definição do sandbox pode ser encontrada no arquivo sandbox.h.
- O arquivo de anotação de função (gerado automaticamente), que fornece protótipos de funções em sandbox, pode ser encontrado em
bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h
após um build do Bazel. - A lógica de execução real (também conhecida como código do host) que usa os procedimentos em sandbox exportados pode ser encontrada em main_sum.cc.
zlib
Esta é uma implementação de demonstração (funcional, mas atualmente não usada em produção) para a biblioteca zlib, exportando algumas das funções dela e disponibilizando-as para o código do host.
A funcionalidade demonstrada do código do host é a decodificação de fluxos zlib de stdin para stdout.
Essa biblioteca SAPI não usa o arquivo sandbox.h
, porque usa a política padrão do Sandbox2 e uma biblioteca SAPI incorporada. Portanto, não é necessário fornecer o método sapi::Sandbox::GetLibPath()
ou sapi::Sandbox::GetPolicy()
.
A SAPI zlib pode ser encontrada em //sapi_sandbox/examples/zlib, junto com o código do host.
stringop
Este exemplo demonstra o uso de protobuffs para fornecer uma string reverse
e
uma função duplication
. A
biblioteca
também contém um
sandbox.h
dedicado para oferecer uma política de sandbox mais rigorosa.
O Host Code não representa um programa "normal", mas demonstra a funcionalidade da biblioteca SAPI usando testes de unidade.
Neste exemplo, as funções não baseadas em protobuf também são incluídas para fornecer uma comparação entre as duas abordagens.