هذا مثال أساسي جدًا يوضّح طريقة عمل SAPI. يحتوي الملف
hello_lib.cc
على دالة واحدة، AddTwoIntegers()، سيتم تشغيلها في وضع الحماية واستدعاؤها
في رمز
المضيف.
مكتبة تجريبية تنفّذ بعض وظائف C
ووظيفة C++
واحدة.
يستخدم هذا التطبيق بروتوكولات protobuf لتبادل البيانات بين "رمز المضيف" و"مكتبة SAPI".
يمكن العثور على تعريف وضع الحماية في الملف
sandbox.h.
يمكن العثور على ملف شرح الدالة (الذي يتم إنشاؤه تلقائيًا) (وهو ملف يوفّر نماذج أولية للدوال المحصورة في بيئة الاختبار المعزولة) في bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h بعد إنشاء Bazel.
يمكن العثور على منطق التنفيذ الفعلي (المعروف أيضًا باسم رمز المضيف) الذي يستخدم الإجراءات المحمية التي تم تصديرها في main_sum.cc.
zlib
هذا هو تنفيذ تجريبي (يعمل، ولكن لا يتم استخدامه حاليًا في الإنتاج) لمكتبة zlib، حيث يتم تصدير بعض وظائفها وإتاحتها لرمز
المضيف.
تتمثّل الوظيفة التي تم توضيحها لرمز المضيف في فك ترميز تدفقات zlib من stdin إلى stdout.
لا تستخدم مكتبة SAPI هذه الملف sandbox.h، لأنّها تستخدم سياسة Sandbox2 التلقائية ومكتبة SAPI مضمّنة، لذلك لا حاجة إلى توفير الطريقتَين sapi::Sandbox::GetLibPath() أو sapi::Sandbox::GetPolicy().
يوضّح هذا المثال كيفية استخدام بروتوكولات protobuf لتوفير السلسلة reverse والدالة duplication. تحتوي المكتبة أيضًا على
sandbox.h
مخصّص لتوفير سياسة أكثر صرامة في "البيئة التجريبية".
لا يمثّل رمز
المضيف
برنامجًا "عاديًا"، بل يوضّح وظائف
مكتبة SAPI باستخدام اختبارات الوحدات.
في هذا المثال، يتم تضمين الدوال غير المستندة إلى بروتوكول Buffer أيضًا لتقديم مقارنة بين الطريقتين.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)"],[[["\u003cp\u003eThis page provides examples demonstrating how to implement Sandboxed API (SAPI) libraries.\u003c/p\u003e\n"],["\u003cp\u003eExamples include basic SAPI usage (\u003ccode\u003ehello_sapi\u003c/code\u003e), protobuf data exchange (\u003ccode\u003esum\u003c/code\u003e), and sandboxed zlib functionality (\u003ccode\u003ezlib\u003c/code\u003e).\u003c/p\u003e\n"],["\u003cp\u003eGoogle interns have created sandboxed versions of various open-source libraries, available on GitHub.\u003c/p\u003e\n"],["\u003cp\u003eEach example includes library code, sandbox definitions (if applicable), and host code for interaction.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003estringop\u003c/code\u003e example showcases the use of protobufs for string operations and features a stricter sandbox policy.\u003c/p\u003e\n"]]],[],null,["Overview\n\nWe have prepared some examples to help you implement your first Sandboxed API\nlibrary.\n\nYou can find them in\n[//sandboxed_api/examples](https://github.com/google/sandboxed-api/blob/master/sandboxed_api/examples),\nsee below for detailed explanations.\n| **Note:** In the summer of 2020, Google interns created a number of SAPI sandboxed versions of open-source libraries which are available for download on [GitHub](https://github.com/google/sandboxed-api/tree/main/oss-internship-2020).\n\nhello_sapi\n\nThis is a very basic example which illustrates how SAPI works. The\n[hello_lib.cc](https://github.com/google/sandboxed-api/blob/main/sandboxed_api/examples/hello_sapi/hello_lib.cc)\nimplements one function, `AddTwoIntegers()`, which will be sandboxed and called\nin the [Host\nCode](https://github.com/google/sandboxed-api/blob/main/sandboxed_api/examples/hello_sapi/hello_main.cc).\n\nThe second Host Code file,\n[hello_transacted.cc](https://github.com/google/sandboxed-api/blob/main/sandboxed_api/examples/hello_sapi/hello_transacted.cc),\ndemonstrates an example use of [SAPI\nTransactions](/code-sandboxing/sandboxed-api/transactions).\n\nSum\n\nA demo library implementing a few [C\nfunctions](https://github.com/google/sandboxed-api/blob/master/sandboxed_api/examples/sum/lib/sum.c)\nand a single [C++\nfunction](https://github.com/google/sandboxed-api/blob/master/sandboxed_api/examples/sum/lib/sum_cpp.cc).\nIt uses protobufs to exchange data between Host Code and the SAPI Library.\n\n- The sandbox definition can be found in the [sandbox.h](https://github.com/google/sandboxed-api/blob/master/sandboxed_api/examples/sum/lib/sandbox.h) file.\n- The (automatically generated) function annotation file (a file providing prototypes of sandboxed functions) can be found in `bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h` after a Bazel build.\n- The actual execution logic (a.k.a. Host Code) which makes use of the exported sandboxed procedures can be found in [main_sum.cc](https://github.com/google/sandboxed-api/blob/master/sandboxed_api/examples/sum/main_sum.cc).\n\nzlib\n\nThis is a demo implementation (functional, but currently not used in production)\nfor the zlib library, exporting some of its functions and making them available\nto the [Host\nCode](https://github.com/google/sandboxed-api/blob/master/sandboxed_api/examples/zlib/main_zlib.cc).\n\nThe demonstrated functionality of the Host Code is decoding of zlib streams from\nstdin to stdout.\n\nThis SAPI library doesn't use the `sandbox.h` file, as it uses the default\nSandbox2 policy, and an embedded SAPI library, so there is no need to provide\nthe `sapi::Sandbox::GetLibPath()` or the `sapi::Sandbox::GetPolicy()` method.\n\nThe zlib SAPI can be found in\n[//sapi_sandbox/examples/zlib](https://github.com/google/sandboxed-api/blob/master/sandboxed_api/examples/zlib),\nalong with its [Host\nCode](https://github.com/google/sandboxed-api/blob/master/sandboxed_api/examples/zlib/main_zlib.cc).\n\nstringop\n\nThis example demonstrates the use of protobufs to provide a string `reverse` and\n`duplication` function. The\n[library](https://github.com/google/sandboxed-api/tree/main/sandboxed_api/examples/stringop/lib)\nalso contains a dedicated\n[sandbox.h](https://github.com/google/sandboxed-api/blob/main/sandboxed_api/examples/stringop/lib/sandbox.h)\nto provide a stricter Sandbox Policy.\n\nThe [Host\nCode](https://github.com/google/sandboxed-api/blob/main/sandboxed_api/examples/stringop/main_stringop.cc)\ndoesn't represent a \"normal\"program, instead it demonstrates the functionality\nof the SAPI library using unit tests.\n\nIn this example, the non-protobuf based functions are also included to provide a\ncomparison between the two approaches."]]