Informações gerais
Preparamos alguns exemplos para ajudar você a implementar sua primeira biblioteca de APIs no modo sandbox.
Você pode encontrá-los em //sandboxed_api/examples. Veja abaixo explicações detalhadas.
hello_sapi
Este é um exemplo muito básico que ilustra como o SAPI funciona. hello_lib.cc implementa uma função, AddTwoIntegers()
, que será colocada no sandbox e chamada no Código do host.
O segundo arquivo de código de host, hello_transacted.cc, demonstra um exemplo de uso de transações 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 de 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 no modo 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 de host, que usa os procedimentos exportados no sandbox pode ser encontrada em main_sum.cc.
zlib
Essa é uma implementação de demonstração (funcional, mas atualmente não usada na produção) para a biblioteca zlib, exportando algumas das funções e disponibilizando-as para o Código host.
A funcionalidade demonstrada do Código de Host é a decodificação de streams zlib de stdin para stdout.
Essa biblioteca SAPI não usa o arquivo sandbox.h
, porque usa a política Sandbox2 padrão 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 com o código host (links em inglês).
Stringop
Este exemplo demonstra o uso de protobufs para fornecer uma função de string reverse
e duplication
. A biblioteca também contém um sandbox.h dedicado para fornecer uma política de sandbox mais rigorosa.
O código host 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.