Difference between Graph API and GraphQL - facebook

Is there a difference between Microsoft Azure Graph API in Cosmos DB and its GraphQL provided by FaceBook?

They are two very different things even though they share the keywords "graph" in them.
CosmosDB Graph API is a query language to manage and query "CosmosDB graph database". Graph database unlike traditional databases, store information in the form of a graph (i.e., vertices and edges).
GraphQL on the other hand is a query language for a user API. Let's say that you have a build stack (the underlying platform could be anything) that has a REST endpoint. However the rest APIs typically are simple and do not let you specify complex filtering conditions. GraphQL is a way (or replacement to tradition REST API) by which the developer of the stack can allow clients to avail these complex functionalities.

Related

Microsoft Access APIs?

I've been digging through Microsoft's API pages (both the REST APIs and the Graph APIs) - but I'm having a hard time finding out if there is any way to access Microsoft Access through an API.
I'd like to be able to make an API call to get like the list of rows in a particular table or query for the list of tables altogether - or, on the flip side, add a row to an existing table. (Edit: I'd like to do this via REST calls and allow users to connect accounts so that many different people could access these things on their own). Does anyone know if this is possible? I'd super appreciate any links to any API docs or examples y'all have ^.^
For reference, I've been looking primarily at these two places:
https://learn.microsoft.com/en-us/graph/api/overview?view=graph-rest-1.0
https://learn.microsoft.com/en-us/office/client-developer/access/access-home
Access doesn't provide any functionality to directly access the data from a HTTP endpoint (REST API). It can only function as a database(backend) in this scenario and you would need to look into other solutions to get the data from the database and provide it from a HTTP endpoint (REST API).
If you're looking to use Microsoft technologies for this solution, then you can look into ASP.NET Core to provide the Web API functionality.
You'll need the Access Data Provider to be able to access data in a MS Access database, which as far as I know runs only on a Windows OS.

SharePoint Rest API across subsites

I am trying to make a single rest api call from a top level site to get results from multiple picture libraries on multiple subsites. Is this possible and if not, what is the best way of approaching this.
I do have a rest api call to retrieve all subsites but I need to retrive results from libraries on a single request.
https://xxxx/_api/web/webs/?$select=title,ServerRelativeUrl"
Unfortunately it is not possible to query multiple lists using a single SharePoint REST API call, as to fetch data from a list you have to specify its parent web and title/ID. Usually for these kinds of queries the best choice is to utilize SharePoint Search REST API (Reference) or, if you can utilize some server side code, you can use the SPSiteDataQuery class to make fetch data from across whole sites or site collections (have a look at this article about SPSiteDataQuery).
Also, have a look at this SO question: Fetch data from multiple list sharepoint REST API in one Ajax call

Is there a complete list of sharepoint online rest api from official docs?

As title said, Is there a complete list of sharepoint online rest api from official docs?
I've done some research. However from the MS docs I can only find Complete basic operations using SharePoint REST endpoints and Get to know the SharePoint REST service.
Or maybe there just isn't one for the current Sharepoint Online implementation from official docs which have REST api reference and samples.
I was consider using MS graph as well, however it seems at the moment, the operations exposed by the Graph for SharePoint are very limited when compared to the native SharePoint REST API.
If there is a list, please share.
REST APIs of SharePoint are conformed to the specification of OData, we can use it like we use other OData APIs.
Here you go:
REST API reference and samples
More information about OData, we can refer to: OData - the best way to REST
If you have been authenticated (e.g. have an access token) and you can use the SharePoint API, then you can get a list of available endpoints for GET requests:
https://[tenant].sharepoint.com/[site]/_api/Web
The first part of the response provides a list of endpoints that you can explore further. [site] can be requested at any level (there can be many subsites below).
For example:
https://[tenant].sharepoint.com/[site]/_api/Web/SiteUsers
will allow you to display a list of users on a site and other possible endpoints, and
https://[tenant].sharepoint.com/[site]/[subsite]/_api/Web/Lists
will display all the lists that belong to the given subsite.
Unfortunately, I was not able to get a list of endpoints for POST requests such as: _api/web/lists/getByTitle('Documents')/breakroleinheritance(copyRoleAssignments=false, clearSubscopes=true)

Record level access control for REST API GET Collection call

So, I am working on the next project that requires more detailed access control functionality (i.e. Sally can only view products in her department).
I get how either a role based access control model or an attribute access control model can 'wrap' an API call to determine if a given user can perform said action on a given object.
Where I keep getting stuck is when you are dealing with a GET call that returns a collection of records. If I ask the API for a page of 20 records from this endpoint, I can't get 20 records, then run a code based authorization check on those records before returning them as I most likely won't be returning 20 records.
It seems like the authorization check either has to be down in the database and/or happen prior to the database query by adding additional filters to the query call (i.e. also filter where product department = clothing).
Anybody have any more concrete implementation examples or ideas how how this could be implemented in a performant manner?
As David mentioned, XACML can be used at the database level for filtering.
Implementing XACML For The Database
The diagram below is for SQL, but can be used as a general example for any database technology.
Let's see how this works:
SQL statement is intercepted.
A query is sent to the external authorization service that implements XACML
The authorization engine (PDP) evaluates the relevant policies, written in XACML or ALFA (an implementation of XACML).
It may query external attribute sources (PIPs) for more info.
The result: SQL statement is dynamically modified to retrieve only authorized data for the user.
How This Would Be Used In An Application
The implementation of XACML you choose to go with would ideally have an SDK in your language of choice or support the XACML REST profile. Either would work for integration into your application.
Given that you are using REST calls, I don't think you would have to add much code to integrate your application with an implementation of XACML.
Implementing XACML for an API Gateway
The principle used in this integration is the ability of an API gateway to make a callout to a third party service.
In this case the third party service is your XACML implementation's Policy Decision Point (PDP). The implementation must support REST/JSON.
The API Gateway is configured to send fine-grained authorization requests to the PDP.
Requests are made using the REST/JSON interface exposed by the PDP. The PDP then returns a response.
The JSON profile of XACML extends the Request/Response schema allowing both the Request and the Response to be encoded in JSON instead of the traditional XML encoding. This makes the Request and the Response much easier to read and also much smaller in size thus transferring less data.
Implementations of XACML
For an entire list of XACML implementations, you can check this list on Wikipedia.
Full disclosure - I work for Axiomatics with David Brossard, who designed the JSON profile for XACML to be used in conjunction with the REST profile.
Axiomatics provides Axiomatics Data Access Filter for relational databases and SmartGuard for HADOOP. Axiomatics Policy Server natively supports both JSON and REST profiles.

Build many websites based in a single RESTful API, how should I do?

I'm building a RESTful API (in PHP using Restler Framework v3.0) and I'm so confusing about what are the best pratices of how to use it.
I want to use the Rest API to authenticate users in more than one domain (same users, many domains) and get some "global" info (eg.: latest blog posts), but I have this questions.
My Questions:
Should I use REST instead of database queries?
Should I use the API only for XHR requests?
EDIT: I found this question that is like mine.
I want to build websites using the same users, get "latest posts", etc... If I make the REST API I could use it to get the users instead of querying database and duplicating code.